- 1. gSOAP是一个开源的项目,用它可以方便的使用c/c++地进行SOAP客户端和服务器端编程,而不必了解xml和SOAP协议的细节
- wsdl2h.exe: 编译wsdl文件生成c/c++头文件
- -o 文件名,指定输出头文件
- -n 名空间前缀 代替默认的ns
- -c 产生纯C代码,否则是C++代码
- -s 不要使用STL代码
- -t 文件名,指定type map文件,默认为typemap.dat
- -e 禁止为enum成员加上名空间前缀
- soapcpp2.exe: gSOAP编译器,编译头文件生成服务器和客户端都需要的c/c++文件(默认使用STL,需要stlvector.h)
- -C 仅生成客户端代码
- -S 仅生成服务器端代码
- -L 不要产生soapClientLib.c和soapServerLib.c文件
- -c 产生纯C代码,否则是C++代码(与头文件有关)
- -I 指定import路径(见上文)
- -x 不要产生XML示例文件
- -i 生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)
- 2. 生成存客户端存根程序和框架
- wsdl2h -o xxx.h xxx.wsdl(-t D:/gsoap-2.7/gsoap/typemap.dat)
- soapcpp2 -L -x -i xxx.h(-I D:/gsoap-2.7/gsoap/import)
- 3. 或直接自己编写xxx.h,并生成xxx.wsdl
- //gsoap ns service name: xxx
- //gsoap ns service style: rpc
- //gsoap ns service encoding: literal
- //gsoap ns service location: http://localhost:8080
- //gsoap ns schema namespace: http://localhost:8080/xxx.wsdl
- int ns__add(int a, int b, int* result);
- 3. 客户端
- 1) 把如下生成的文件添加到项目:
- stdsoap2.h,stdsoap2.cpp,
- soapH.h,soapC.cpp,soapStub.h,
- soapxxxProxy.h,soapxxxProxy.cpp,xxxSoap.nsmap
- wsock32.lib
- 2) 代理方式调用
- #include "soapTestWebServiceProxy.h"
- #include "TestWebService.nsmap"
- int main(int argc, char* argv[])
- {
- int result = 0;
- TestWebServiceProxy proxy;
- proxy.add(12, 23, &result);
- }
- 4. 服务端
- 1) 把如下生成的文件添加到项目:
- stdsoap2.h,stdsoap2.cpp,
- soapH.h,soapC.cpp,soapStub.h,
- soapxxxService.h,soapxxxService.cpp,xxxSoap.nsmap
- wsock32.lib
- 2) 实现接口函数
- int TestWebServiceService::add(int a, int b, int *result)
- {
- *result = a+b;
- return SOAP_OK;
- }
- 3) 开启服务
- #include "soapTestWebServiceService.h"
- #include "TestWebService.nsmap"
- int main(int argc, char* argv[])
- {
- TestWebServiceService service;
- service.run(8080);
- }
C++调用WebService
最新推荐文章于 2020-06-13 08:28:15 发布