windows下vs2012用gsoap开发webservice实例
零:说明
1、本文是根据网上前人经验结合自己动手操作写成,开发工具用的vs2012,gsoap用的是gsoap-2.8;
2、gsoap提供的工具简单介绍
1)wsdl2h.exe:根据WSDL文件生成头文件。这个是别人发布了webservice服务,提供给我们WSDL文件,我们根据WSDL生成头文件,进而实现我们的客 户端。
2)soapcpp2.exe:根据头文件生成调用远程soap服务的客户端框架和提供soap服务的服务端框架。如果我们要自己做server端,则需要自己写头文件, 根据头文件,生成客户端框架和服务端框架,在此框架中实现自己的服务。
一:根据头文件用soapcpp2.exe生成框架代码
0、该soap服务端是实现两个整数相加,供远程调用;
1、编写头文件
1)在vs中新建解决方案,名字为gSoapTest
2)在项目gSoapTest下新建头文件,名字为add.h
头文件代码:
//gsoap ns service name: add
//gsoap ns service namespace: http://localhost/add.wsdl
//gsoap ns service location: http://localhost
//gsoap ns service executable: add.cgi
//gsoap ns service encoding: encoded
//gsoap ns schema namespace: urn:add int ns__add( int num1, int num2, int* sum );
3)将gsoap安装目录下的\gsoap-2.8\gsoap\bin\win32下的soapcpp2.exe拷贝到add.h同一目录下。
此处我的目录是E:\biancheng\gSoapTest\gSoapTest
4)在控制台中跳转到add.h目录下,执行soapcpp2.exe add.h,最后会显示Compilation successful,代表执行成功
此时E:\biancheng\gSoapTest\gSoapTest该目录下回生成很多文件
二、根据框架实现server端代码
1、在gSoapTest解决方案下新建项目,项目名为server。此时,server所在目录为E:\biancheng\gSoapTest\server
1)将E:\biancheng\gSoapTest\gSoapTest下的文件add.nsmap,add.h,soapH.h,soapStub.h soapC.cpp,soapServer.cpp以及
\gsoap-2.8\gsoap\bin\win32目录下的stdsoap2.h,stdsoap2.cpp拷贝到server项目目录(E:\biancheng\gSoapTest\server)下。
2)将add.nsmap,add.h,soapH.h,soapStub.h,stdsoap2.h添加到项目server头文件中。
3)将soapC.cpp,soapServer.cpp,stdsoap2.cpp添加到项目server源文件中。
4)在项目server源文件中新建源文件,名字为server.cpp
5)将wsock32.lib库添加到server项目中
右键server->属性->配置属性->连接器->输入->附加依赖项,在附加依赖项中添加wsock32.lib
6)编写server.cpp代码
#include <stdio.h>
#include <stdlib.h>
#include "stdsoap2.h"
#include "add.h"
#include "add.nsmap"
int main(int argc, char* argv[])
{
int m, s;
struct soap add_soap;
soap_init(&add_soap);
//soap_set_namespaces(&add_soap, add_namespaces);
if (argc < )
{
printf("usage: %s <server_port> \n", argv[]);
exit();
}
else
{
m = soap_bind(&add_soap, NULL, atoi(argv[]), );
if (m < )
{
soap_print_fault(&add_soap, stderr);
exit(-);
}
fprintf(stderr, "Socket connection successful: master socket = %d\n", m);
for ( ; ; )
{
s = soap_accept(&add_soap);
if (s < )
{
soap_print_fault(&add_soap, stderr);
exit(-);
}
fprintf(stderr, "Socket connection successful: slave socket = %d\n", s);
soap_serve(&add_soap);//该句说明该server的服务
soap_end(&add_soap);
}
}
return ;
} //server端的实现函数与add.h中声明的函数相同,但是多了一个当前的soap连接的参数 int ns__add(struct soap *add_soap, int num1, int num2, int *sum)
{
*sum = num1 + num2;
return ;
}
二、根据框架实现client端代码
1、在解决方案gSoapTest中新建项目,名字为client。此时,server所在目录为E:\biancheng\gSoapTest\client
1)将E:\biancheng\gSoapTest\gSoapTest下的文件add.nsmap,add.h,soapH.h,soapStub.h soapC.cpp,soapClient.cpp以及
\gsoap-2.8\gsoap\bin\win32目录下的stdsoap2.h,stdsoap2.cpp拷贝到client项目目录(E:\biancheng\gSoapTest\client)下。
2)将add.nsmap,add.h,soapH.h,soapStub.h,stdsoap2.h添加到项目client头文件中。
3)将soapC.cpp,soapClient.cpp,stdsoap2.cpp添加到项目client源文件中。
4)在项目server源文件中新建源文件,名字为client.cpp
5)编写clent.cpp代码
#include <stdio.h>
#include <stdlib.h>
#include "stdsoap2.h"
#include "soapH.h"
#include "add.nsmap" int add(const char* server, int num1, int num2, int *sum); int main(int argc, char **argv)
{
int result = -;
char* server="http://localhost:4567";
int num1 = ;
int num2 = ;
int sum = ;
if( argc < )
{
printf("usage: %s num1 num2 \n", argv[]);
exit();
}
num1 = atoi(argv[]);
num2 = atoi(argv[]);
result = add(server, num1, num2, &sum);
if (result != )
{
printf("soap err,errcode = %d\n", result);
}
else
{
printf("%d+%d=%d\n", num1, num2, sum );
}
return ;
} int add(const char* server, int num1, int num2, int *sum)
{
struct soap add_soap;
int result = ;
soap_init(&add_soap);
// soap_set_namespaces(&add_soap, add_namespaces);
//该函数是客户端调用的主要函数,后面几个参数和add.h中声明的一样,前面多了3个参数,函数名是接口函数名ns__add前面加上 //soap_call_
soap_call_ns__add( &add_soap, server, "", num1, num2, sum );
if(add_soap.error)
{
printf("soap error:%d,%s,%s\n", add_soap.error, *soap_faultcode(&add_soap), *soap_faultstring(&add_soap) );
result = add_soap.error;
} soap_end(&add_soap);
soap_done(&add_soap);
return result;
}
三、测试
1、分别编译server、client
2、启动server,并绑定访问端口号4567
通过IE访问http://localhost:4567,如下,则服务端成功
3、启动client,输入1 2,如下,代表客户端访问服务端成功
windows下vs2012用gsoap开发webservice实例的更多相关文章
- Windows下搭建Spark+Hadoop开发环境
Windows下搭建Spark+Hadoop开发环境需要一些工具支持. 只需要确保您的电脑已装好Java环境,那么就可以开始了. 一. 准备工作 1. 下载Hadoop2.7.1版本(写Spark和H ...
- 【转】linux和windows下安装python集成开发环境及其python包
本系列分为两篇: 1.[转]windows和linux中搭建python集成开发环境IDE 2.[转]linux和windows下安装python集成开发环境及其python包 3.windows和l ...
- Windows下的Objective-C集成开发环境(IDE)
Windows下的Objective-C集成开发环境(IDE) 分类: Objective-C2012-04-20 21:54 26631人阅读 评论(42) 收藏 举报 windowside编译器c ...
- Windows下搭建objective C开发环境
摘自:http://blog.csdn.net/zhanghefu/article/details/18320827 最近打算针对iPhone.iPod touch和iPad开发一些应用,所以,需要开 ...
- Windows 下最佳的 C++ 开发的 IDE 是什么?
作者:渡世白玉链接:https://www.zhihu.com/question/19589089/answer/30312199来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- windows下搭建nginx+php开发环境
windows下搭建nginx+php开发环境 1.前言 windows下大多我们都是下载使用集成环境,但是本地已经存在一个集成环境,但不适合项目的需求.因此准备再自己搭建一个环境. 2.准备 工具: ...
- Windows下安装Object C开发环境,及Hello Word(转)
Windows下安装Object C开发环境,及Hello Word 最近想学习iphone开发,但是由于没有c基础,只有java基础.所以先从基础学习,首先是搭建环境,目前手头没有mac机子,只能先 ...
- Windows下快速搭建安卓开发环境android-studio
Windows下快速搭建安卓开发环境android-studio 发布时间:2018-01-18 来源:网络 上传者:用户 关键字: 安卓 搭建 Android Windows 快速 环境 Studi ...
- 【RN - 基础】之Windows下搭建React Native开发环境
前言 React Native由Facebook公司于2015年F8大会上开源,其主张“Learn once, write everywhere”.React Native的核心设计理念是:既拥有Na ...
随机推荐
- Iconfot阿里妈妈-css高级应用
矢量图标替换教程 首先进入:http://www.iconfont.cn/ 搜索你分类的关键字---然后加入购物车 加入购物车之后,下载到本地用浏览器打开demo.html 把a class=“原来样 ...
- ASP.NET MVC路径引用总结
1.关于路径: (1)绝对路径 包含站点路径的路径:<a href=”http://www.baidu.com/about.jpg”>百度</a> 站点改变路径失效: (2)相 ...
- Android中的android:layout_width和android:width
最近在看android的东西,发现很多和web前台的东西一样(思想).只是看到很多属性的写法和前台有差别,刚刚看到这样的属性: android:width 其实是定义控件上面的文本(TextView) ...
- mongodb 配置单实例与双实例
环境: centos6.5 192.168.16.70 配置单实例mongodb:[root@www soft]# tar xf mongodb-linux-x86_64-rhel62-3.2.7.t ...
- 【BZOJ3679】数字之积 DFS+DP
[BZOJ3679]数字之积 Description 一个数x各个数位上的数之积记为f(x) <不含前导零>求[L,R)中满足0<f(x)<=n的数的个数 Input 第一行一 ...
- 实现RTSP网站微信直播方案EasyNVR(linux版)部署问题之:ERR_CONTENT_LENGTH_MISMATCH
发现问题: 想要优化一下EasyNVR相关功能,内部测试软件,于是在linux系统中部署了一台EasyNVR.当部署好,运行起来发现问题: EasyNVR的配置页面数据出不来. 分析问题: 基于是we ...
- spring mvc 及NUI前端框架学习笔记
spring mvc 及NUI前端框架学习笔记 页面传值 一.同一页面 直接通过$J.getbyName("id").setValue(id); Set值即可 二.跳转页面(bus ...
- 九度OJ 1156:谁是你的潜在朋友 (并查集)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5802 解决:2593 题目描述: "臭味相投"--这是我们描述朋友时喜欢用的词汇.两个人是朋友通常意味着他们存在着许多 ...
- client网络优化方法
减小图片大小(使用WebP格式的图片) 大部分的Facebook应用数据都是图片,因此降低图片的大小就能够较少数据的下载量.从而加快下载速度,这一点在高延迟的网络环境下很重要.Facebook返回给 ...
- 扫盲--.net 程序集
前言:用了几天的时间把高级编程里面程序集一章看完了,原来自己只知道写代码,右键添加引用,从来也不知道操作的实质是什么,微软总是这个套路,鼠标点点就能把任务完成,这对新手友好但是对要通透了解程序执行和内 ...