1、 解压gsoap_2.8.10;
2、 在目录\gsoap_2.8.10\gsoap-2.8\gsoap\bin\win32下
3、 打开运行-》cmd-》cd到以上目录下;
4、 wsdl2h -s -o test.h http://localhost:6968/WebServiceTest.asmx?WSDL 在win32 文件夹下 生成test.h
5、 把gsoap->import里面的soap12.h 和stlvector.h复制到win32目录下
6、 执行 soapcpp2.exe -C test.h命令,会生成大堆文件
soapStub.h // soap的存根文件,定义了ayandy.h里对应的远程调用模型
soapC.c soapH.h // soap的序列和反序列代码,它已经包含了soapStub.h,服务器端与客户端都要包含它
soapClient.c soapClientLib.c // 客户端代码,soapClientLib.c文件则只是简单地包含soapClient.c和soapC.c
soapServer.c soapServerLib.c // 服务器端代码,soapServerLib.c文件则只是简单地包含soapServer.c和soapC.c
ServiceSoap.nsmap ServiceSoap12.nsmap // 名空间定义,服务器端与客户端都要包含它
soapServiceSoapProxy.h soapServiceSoap12Proxy.h // 客户端的C++简单包装(如果头文件是纯C代码,这两个文件就不会生成)
7、 将上述文件复制到C++工程目录下。并加载近工程中。
8、 在引用cpp文件里面添加
#include "soapH.h"
#include "soapWebServiceTestSoapProxy.h"
#include "WebServiceTestSoap.nsmap"
9、调用的实例Demo:
#include <iostream>
#include <cstring>
#include <string>
#include "soapH.h"
#include "soapWebServiceTestSoapProxy.h"
#include "WebServiceTestSoap.nsmap"
using namespace std;
int main(int argc,char **argv)
{
WebServiceTestSoap websoap;
_ns1__ReceiveInteractiveSMS rsms;
_ns1__ReceiveInteractiveSMSResponse rRes;
string no="13800138000";
string sno="13800138000";
string scon="text";
rsms.MobileNo=&no;
rsms.ServiceNo=&sno;
rsms.SmsContent=&scon;
_ns1__addResponse r;
_ns1__add d;
d.i = 1;
d.j = 2;
websoap.__ns2__add(&d,&r);
int i = websoap.__ns2__ReceiveInteractiveSMS(&rsms,&rRes);
cout<<*rRes.ExceptionMessage<<endl;
cout<<i<<endl;
int y;
cin>>y;
cout<<endl;
}
在本次的项目开发,需要调用C# web service接口,使用Gsoap很好的解决了这个问题;
注:只是在web service类或方法更改的时候需要重新生成本地的C++ 头文件,内部逻辑改变,但参数及返回值改变则不需要重新生成。