通常用gsoap调用webService,是没有什么问题的,
参考http://hi.baidu.com/lbird/blog/item/0222bb6eb2eb12d480cb4a50.html
http://www.ibm.com/developerworks/cn/webservices/ws-soa-gsoap/index.html#resources
但是如果用gsoap调用WCF,就有问题了,和服务的和客户端soap的版本问题有关系,
详见下面的链接
http://social.msdn.microsoft.com/Forums/zh-SG/wcf/thread/1ff173ee-c371-45b1-986b-fbb67ea94de8
http://social.msdn.microsoft.com/Forums/zh-CN/wcf/thread/082a52ea-d705-42c7-9305-3a5f7eb52367
1:先用wsdl2h命令来生成C++头文件
wsdl2h -s -o cert.h
2:再用soapcpp2生成代理文件
soapcpp2 -C -L -w -x -i -2 -a cert.h
3:生成的文件的有6个
....namap 、...Proxy.cpp、...Proxy.h、soapC.cpp 、soapH.h、soapStub.h
以下是简要说明:
【 ...namap 命名空间
...Proxy.cpp、...Proxy.h 代理类\头文件
soapC.cpp 、soapH.h 指定数据结构的序列化器和反序列化器、从输入 Header 文件生成的经过修改且带标注的 Header 文件
soapStub.h 从输入 Header 文件生成的经过修改且带标注的 Header 文件
】
4:用VS2005 或者VC6.0(没有试过)j将上面的文件引入工程,还有gsoap下的stdsoap2.cpp和stdsoap2.h,
5:也是最重要的一步,修改命名空间
For removing soap 1.2 namespace from the your web-service client project you should to change strings
{"SOAP-ENV", "http://www.w3.org/2003/05/soap-envelope", "http://www.w3.org/2003/05/soap-envelope", NULL}, {"SOAP-ENC", "http://www.w3.org/2003/05/soap-encoding", "http://www.w3.org/2003/05/soap-encoding", NULL}, {"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL}, {"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL},
to
{"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", NULL, NULL}, {"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", NULL, NULL}, {"xsi", "http://www.w3.org/2001/XMLSchema-instance", NULL, NULL}, {"xsd", "http://www.w3.org/2001/XMLSchema", NULL, NULL},
in your .nsmap file and *Proxy.cpp file.
The above three lines tells the client to send SOAP message with version 1.1 instead of the default generated message version 1.2
6:代理类当做普通类,进行函数调用就可以了,如果返回值不是SOAP_OK,可以用soap_sprint_fault函数进行输出!
_ns3__GetChar ns3 ;