- 前言
一般情况下VC书写Webservice客户端,可以使用微软提供的SOAP Toolkit 3.0 SDK,这样比较方便快捷,但是用过的人都知道,这样的代码部署会有很大的问题,必须要求部署机器安装该SDK。
GSOAP是一个开源项目,可以解决这个部署的问题,但是由于他只是一个开源的东西,要与vc无缝整合并不是一个容易的事情。
http://www.cs.fsu.edu/~engelen/soapdoc2.html是GSOAP的指南,按照该指南一步一步做,其实也不会成功。
- 测试环境
IDE版本:
VS2008(其他版本也适用)
GSOAP版本:
gsoap2.7.12(其他版本也适用)
- 向导
1 . 环境假定:
1)已有一个webservice: http://localhost:16041/WebService1.asmx, 该web服务暴露出方法
[WebMethod]
public string HelloWorld()
{
return "Hello World";
}
2)假定已用向导生成win32控制台工程 cln,目录 c:/code/cln
3) 假定gsoap源目录 c:/gsoap
2.准备:
1)建立子目录c:/code/cln/gsoap
2) 复制wsdl2h.exe,soapcpp2.exe到c:/code/cln/gsoap,该2文件在c:/gsoap/bin/win32下可找到
3)复制stdsoap2.h,stdsoap2.cpp到c:/code/cln/gsoap,该2文件在c:/gsoap根目录下
3.wsdl2h编译.h
命令行进入c:/code/cln/gsoap
wsdl2h -I"c:/gsoap/WS" -o test.h http://localhost:16041/WebService1.asmx?wsdl
该操作将生成c:/code/cln/gsoap/test.h
4.soapcpp2编译.cpp
soapcpp2 -I"c:/gsoap/import" test.h
5.cln工程整合编译
将soapC.cpp,soapClient.cpp,stdsoap2.cpp包含入工程,右键选择这3个cpp文件,去除预编译头,否则工程将无法正常编译.
cln.cpp源代码
#include "stdafx.h"
#include "gsoap/soapWebService1SoapProxy.h"
#include "gsoap/WebService1Soap.nsmap"
int _tmain(int argc, _TCHAR* argv[])
{
WebService1Soap s;
_ns1__HelloWorld request;
_ns1__HelloWorldResponse response;
s.__ns2__HelloWorld(&request,&response);
return 0;
}