http://genivia.com/Products/gsoap/tutorial.html
http://www.cppblog.com/qiujian5628/archive/2008/06/19/54019.html windows版
http://www.cppblog.com/flyinghare/archive/2012/08/15/187267.html linux版
http://blog.youkuaiyun.com/waxgourd0/article/details/7641845 windows版
http://blog.youkuaiyun.com/lingfemg721/article/details/6947934 windows版
http://hi.baidu.com/2sky2sea/item/1b791c4a8b6660eda4c06664 linux版
http://www.cnblogs.com/linxr/archive/2011/10/17/2215285.html linux版
http://blog.youkuaiyun.com/yui/article/details/6171428 这位仁兄写的一系列关于gSOAP 的文章很好。
笔记:
-----------------------------------------------------------
环境:win 7,MS 2005
1. 配置环境变量 PATH,将gSOAP可执行程序所在路径添加进去,如 C:\gsoap-2.8\gsoap\bin\win32
2. 创建WebService客户端
wsdl2h -c -o stock.h http://webservice.webxml.com.cn/WebServices/ChinaStockWebService.asmx?wsdl
soapcpp2 -C stock.h -IC:\gsoap-2.8\gsoap\import //这里使用-I参数
然后,无疾而终……
-----------------------------------------------------------
环境: redhat 4.6 64bit
1. 安装gSOAP:
./configure --prefix=/opt/gsoap-2.8
make && make install
配置环境变量 PATH, LD_LIBRARY_PATH
2. 创建WebService客户端
wsdl2h -c -s -o stock.h http://webservice.webxml.com.cn/WebServices/ChinaStockWebService.asmx?wsdl //生成纯C代码,不使用stl
soapcpp2 -C stock.h //仅生成客户端代码
gcc -O2 -o stock stock.c soapC.c soapClient.c -I/opt/gsoap-2.8/include -L/opt/gsoap-2.8/lib –lgsoap //生成客户端调用WebService程序
说明:
1. wsdl2h 中的wsdl URL由 WebService 服务端提供,stock.h 是由此生成的头文件。
2. 根据生成的头文件进一步生成客户端存根程序和相关的头文件、资源文件。
3. WebService 对应的C函数接口及输入参数、输出参数在生成的头文件 soapStub.h 中,接口函数以 soap_call_ 开头,
接口函数的前三个参数都是固定的,与接口相关的输入输出参数紧跟其后。stock.c 由自己编写,其中实现调用 WebService 接口这个过程。示例直接参考 http://blog.youkuaiyun.com/yui/article/details/6171428 中的stock.c 。
4. C程序链接的库为 libgsoap.a, C++ 链接的库为 libgsoap++.a.
-----------------------------------------------------------
中文乱码问题解决
如果 WebService 接口的输入或输出参数中含有中文,默认可能会乱码。参考 http://blog.youkuaiyun.com/yui/article/details/5758906 可解决该问题。
两个要点:
一、设置 soap_set_mode(&soap, SOAP_C_UTFSTRING);
二、使用 iconv 进行字符编码转换。
-----------------------------------------------------------
解决在链接生成自己的动态库时遇到:libgsoap.a(libgsoap_a-stdsoap2.o): relocation R_X86_64_32S against `a local symbol' can not
be used when making a shared object; recompile with -fPIC 问题。
在编译安装 gsoap 时,在 ./configure 之前设置gcc,g++编译参数:
$ export CFLAGS="-fPIC"
$ export CXXFLAGS="-fPIC"
再 ./configure, make && make install ,再编译链接自己的动态库,便能成功。