VC6使用gSoap访问WebService
开发的过程非常的简单,首先定义好WebService所需要提供的接口(或是服务),其实就是一个.h申明文件,然后使用“soapcpp2.exe”工具,他会帮你生成一系列的中间文件。
开发WebService的服务器比较简单,将几个头文件和.cpp文件加入工程,很快就搞定的,之前在.h申明里面定义的方法,gsoap会进行简单的一个封装,变成一个回调函数,函数体已经定义好了,只需要填写实现的方法即可。
开发WebService的客户端也很容易,同样是将头文件和.cpp文件加入工程,之前在.h申明里面定义的方法,gsoap已经进行了封装,你只需要调用封装的代码即可,这样,调用远程服务器上的方法,就和调用本地的方法是一样的,中间的网络传输(TCP)、协议解析(XML)等都不需要程序来关心了!
之前担心使用gsoap开发出来的程序会依赖gsoap的某些组件,如DLL等,但是实际上是没有依赖任何库的,用Depends看了一下,生成的程序与gsoap没有一点关系,从这点来说,gsoap仅仅是一个工具,他所产生的代码都是源代码级别的,之也就是为什么gsoap效率之所以高的原因之一吧!
使用gsoap开发的WebService服务端其实就是一个小型的HTTP Server。
gsoap客户端代码支持两种实现方式:
1>代理类 2>非代理类的方式。
gSOAP主要包括两个exe: wsdl2h.exe的作用是根据WSDL生成C/C++风格的头文件; soapcpp2.exe的作用是根据头文件自动生成调用远程 SOAP服务的客户端代码(称为存根:Stub)和提供SOAP服务的框架代码(称为框架:Skeleton),另外它也能从头文件生成WSDL文件
FAQ
Q:如果看到soapcpp2提示:”Critical error: #import: Cannot open file "stlvector.h" for reading.“,
A:那是因为我们的头文件使用了STL(wsdl2h 没用-s选项),这时要使用-I选项指定gSOAP的 import文件路径。如:
soapcpp2 -C -x -L -IC:\webservice\gsoap\gsoap-2.8\gsoap\import calc.h
Q:error C2079: 'storage' uses undefined struct 'sockaddr_storage'
'sockaddr_storage'结构没有定义.关于这个错误网上很多大侠都说了,可能是使用的winsock2.h文件不完整.我找了好多版本我也没发现一个带这个结构定义的,最简单的办法,就是自己定义一个, sockaddr_storage的定义: 放哪里,自己看着办吧,我是放到了stdsoap2.h中了#ifndef WITH_NOIO //增加begin,约2210-2869行 struct sockaddr_storage { u_char sa_len; u_char sa_family; u_char padding[128]; }; //增加end unsigned int ipv6_multicast_if;
Q: stdsoap2.h(2935) : error C2146: syntax error : missing ';' before identifier 'c_locale'
stdsoap2.h(2935) : error C2501: '_locale_t' : missing storage-class or type specifiers
stdsoap2.h(2935) : error C2501: 'c_locale' : missing storage-class or type specifiers
A: Project -> Setting 在对话框中的C++选项卡中 Genernal/Project Options:下添加 /D "WITH_NO_C_LOCALE"或:/* if this does not compile use -DWITH_INCLUDE_XLOCALE_H, or use -DWITH_NO_C_LOCALE to disable locale support */
Q:如何使用gSoap在同一个程序里面生成访问多个web service的类?
A:使用wsdl2h -q namespace 参数,会根据命名空间生成不同的头文件,再用soapcpp2去一一生成类。https://stackoverflow.com/questions/13656883/gsoap-multiple-wsdls-but-only-one-proxy-class
Q:error LNK2001: 无法解析的外部符号 _namespaces
A:
工程--属性--配置属性---C/C++---预处理器, 添加 WITH_NONAMESPACES
gsoap官网 http://www.cs.fsu.edu/~engelen/soap.html 是学习的宝库
CurrencyConvertor: How to Use gSOAP and Webservices, Part One
CurrencyConvertor: 如何使用gSOAP和 web Webservices,第一个部分CurrencyConvertor - How use gSOAP and WebServices - Part 2 Doing