项目组需要一个WebService调用的框架,在搜索了N多网页后,终于找到了个几乎完美的开源SOAP实现--gSOAP,其官方网站是:http://gsoap2.sourceforge.net/
具体使用方法就不多说了,just google it,下面只对在Symbian平台下使用略说几点。
注:需要一个服务提供者,我用的是ASP.NET+IIS在VS2005调试环境下在本地建立的一个服务器,使用修改的HelloWorld服务来测试。
[WebMethod]
public string SayHello(string usr) {
return usr+", Welcome Here!";
}
1. 取得该WebService的WSDL描述文档,命名为Service.wsdl
2. 在命令行进入gsoap/bin/win32 目录,先后执行以下指令:
wsdl2h –s –o gService.h Service.wsdl
如果成功,则在当前目录得到一个gService.h文件
soapcpp2 -CLwx gService.h
3. 在当前目录得到多个H/CPP源文件,它们是根据WSDL生成的代码存根等文件,每个文件的具体作用大家可以看官方资料。
4. 在Carbide C++中新建一个工程,然后将步骤2生成的几个文件弄过去,首先将soapH.h/soapStub.h/soapServiceSoapProxy.h拷到工程的inc目录下,将soapC.cpp/soapClient.cpp拷到工程的src目录下。
5. 还有两个文件在gsoap目录下,stdsoap2.h和stdsoap2.cpp,这两个是gSoap引擎,也拷入相应目录。
6. 先修改xxxUi.h,在头文件中增加如下代码:
#include "soapServiceSoapProxy.h"
在类声明中加入新成员变量:
ServiceSoap* iService;
7. 接着修改xxxUi.cpp文件,在构造时new它,在析构时delete它即可,使用如下:
case ECommand1:
{
if(iService)
{
_ns1__SayHello req;
_ns1__SayHelloResponse resp;
req.usr = "Alex";
if(iService->__ns2__SayHello(&req, &resp) == SOAP_OK)
{
CAknInformationNote* informationNote = new (ELeave) CAknInformationNote;
HBufC* respTxt = charToNewBufLC(resp.SayHelloResult);
informationNote->ExecuteLD(*respTxt);
CleanupStack::PopAndDestroy(respTxt);
}
}
}
调用就是如此简单,具体的变量可参照生成的stubs来理解,比较容易。
注:上面的只是主要步骤,许多细节没有说明,否则篇幅就太长了。