一般情況下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;
}