一、下载最新gsoap包,下载完成解压就可以了。
二、把Wsdl2h.exe的目录设置成环境变量。
三、生成头文件
wsdl2h -o xxx.h url(xxx.h为自己定义 的头文件名称,url为需要访问的webservice地址+?wsdl
注:执行此步骤时若输入url生成的头文件为空时,可以用webserver生成的.wsdl文件代替url。
四、将“\gsoap-x.x\gsoap\import”目录下的soap12.h、stl.h、stldeque.h、stllist.h、stlset.h、stlvector.h、复制到“gsoap-2.8\gsoap\bin\win32”中。
生成代码的时候要用到(若不在
gsoap-2.8\gsoap\bin\win32目录下生成则需要把这两个文件复制到当前目录下
)
。x.x为版本号,根据自己的版本确定。
五、生成webService要调用的代码
-C 仅生成客户端代码
-S 仅生成服务器端代码
-L 不要产生soapClientLib.c和soapServerLib.c文件
-c 产生纯C代码,否则是C++代码(与头文件有关)
-I 指定import路径(见上文) ·
-x 不要产生XML示例文件
-i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)。
根据自己的情况选择代码
例如:soapcpp2 -C -L -i -x xxx.h -I ../../import(xxx.h就是上边生成的 头文件)。
若提示“Critical error: #import: Cannot open File "stl.h" for reading”,吧stl.h文件复制过来就行。
六、在新工程中新建一个文件夹,将上一步生成的下列文件复制到新建的文件夹中。
1.soapC.cpp
2.soapH.h
3.xxxSoapProxy.h(此处的xxx为.wsdl文件的文件名)
4.xxxSoapProxy.cpp
5.soapStub.h
七、在“\gsoap-x.x\gsoap”目录下找到 stdsoap2.cpp 和stdsoap2.h 也复制到上一步的文件中去。
八、把xxx.nsmap(在第六步中生成的)中的文件添加到资源中。
九、在工程中开始调用。
1.构造webservice代理类。(xxxSoapProxy.h中定义的类)
2.定义发送请求的报文结构体。
3.给结构体赋值。
4.定义返回值得报文结构体。
5.使用代理类中webservice的方法。
6.取得返回结果。
备注:
1. .nsmap添加后 编译时会出现与其相关的错误如下图所示 添加WITH_NONAMESPACES 即可;
2 .最好将webservice中的数组转换成宽字符不然汉子会乱码
转换方法是在当前目录创建typemap.dat文件并在文件中写入如下语句:
xsd__string = | std::wstring | wchar_t*