摘自:http://www.qingfengju.com/article.asp?id=290
1.gSOAP简介
1.gSOAP简介
gSOAP
是一个跨平台的,用于开发Web Service
服务端和客户端的工具包。
2.Web Service客户端示例
2.1 为便于测试,先用ASP.NET创建一个Web Service服务端。
主要代码如下:
[
WebService(Namespace= "namespace$http://www.qingfengju.com/")]
[
WebServiceBinding(ConformsTo= WsiProfiles.BasicProfile1_1)]
[
System.ComponentModel.ToolboxItem(false)]
public
class TestService : System.Web.Services.WebService
{
[WebMethod]
publicstring HelloWorld()
{
return "Hello World";
}
[WebMethod]
publicstring ToHex(intnum)
{
return "0x" +num.ToString("X8");
}
}
2.2 用gSOAP提供的工具生成wsdl对应的C++代码
# -o output to file
# -v verbose output
wsdl2h -v -o TestServiceSoap.h http://localhost/TestService.asmx?WSDL
# -L don't generate soapClientLib/soapServerLib
# -C generate client-side code only
# -I use path(s) for #import
# -x don't generate sample XML message files
soapcpp2 -L -C -ID:\Tools\gSOAP_2.8.8\gsoap\import -x TestServiceSoap.h
注意:
我的gsoap
安装在D:\Tools\gSOAP_2.8.8
目录,wsdl2h.exe
和soapcpp2.exe
在
D:\Tools\gSOAP_2.8.8\gsoap\bin\win32
目录中。
为SOAP1.2
生成的文件如下两个文件可以删除:
soapTestServiceSoap12Proxy.h
TestServiceSoap12.nsmap
2.3 测试代码TestClient.cpp
#include
"TestServiceSoap.nsmap"
#include
"soapTestServiceSoapProxy.h"
#include
<iostream>
using
namespace std;
int
main()
{
TestServiceSoap test;
//
调用
HelloWorld()
_ns1__HelloWorld hello;
_ns1__HelloWorldResponse hello_res;
int ret=test.__ns2__HelloWorld(&hello,&hello_res);
if(0!=ret)
{
cerr<<"error:__ns2__HelloWorld()="<<ret<<endl;
return -1;
}
cout<<*hello_res.HelloWorldResult<<endl;
//
调用
ToHex(num)
_ns1__ToHex tohex;
tohex.num=65535;
_ns1__ToHexResponse tohex_res;
ret=test.__ns2__ToHex(&tohex,&tohex_res);
if(0!=ret)
{
cerr<<"error:__ns2__ToHex()="<<ret<<endl;
return -1;
}
cout<<*tohex_res.ToHexResult<<endl;
return 0;
}
用如下命令编译(stdsoap2.h,stdsoap2.cpp
需要从D:\Tools\gSOAP_2.8.8\gsoap
复制过来)
:
# /EHs
启用
C++ EH (
没有
SEH
异常
)
# /EHc
外部“
C
”
默认为
nothrow
# /Fe<file>
命名可执行文件
cl /EHsc /FeTestClient.exe TestClient.cpp soapC.cpp soapClient.cpp stdsoap2.cpp
本例源码使用Visual Studio 2008
编译。
3.小技巧
3.1 使用gSOAP访问UTF-8编码的WebService
a.
使用自己的typemap.dat
,即:用此wsdl2h -t
mytypemap.dat
生成wsdl
对应的C++
代码
b.
在mytypemap.dat
中增加:
xsd__string
= | std::wstring| wchar_t*
c.
XXXX
.
soap
->
mode
=
SOAP_C_UTFSTRING
;
d.
如果要在控制台输出Unicode
字符串,需要执行:
wcout
.
imbue
(
std
::
locale
(
"chs"
));
wcout
<<
L
"wstring"
<<
endl
;
注:这里的XXXX
是自动生成的Proxy
类对象。
3.2 为gSOAP设置代理服务器
XXXX
.
soap
->
proxy_host
=
"192.168.2.72"
;
XXXX
.
soap
->
proxy_http_version
=
"1.1"
;
XXXX
.
soap
->
proxy_port
=
8080
;
3.3 为gSOAP设置超时时间
XXXX
.
soap
->
connect_timeout
=
20
;
XXXX
.
soap
->
send_timeout
=
20
;
XXXX
.
soap
->
recv_timeout
=
20
;
4.小工具:QVOD搜索神器命令行版
网上流传的[QVOD
搜索神器]
,这里我做了一个命令行版,也使用的是gSOAP
。
WebService 接口地址:http://www.cnemoney.com/searchService.dll/soap/IqvodsearchService
使用方法:QvodSearch.exe <关键字>
例如:QvodSearch.exe 许巍
得到如下结果:
qvod://21375080|580F55C1166C6F4E238A231D07E3568C7537207A|许巍_爱_01.rmvb|
qvod://17281102|353CCAD9913C779F9D5AFF13E7AD523568E2331F|许巍_故事_02.rmvb|
qvod://23589892|04A4E5573F7017C2AFDFD97F56A970858BB57407|许巍_礼物_03.rmvb|
qvod://32091361|8D1569E40D975FAB300EBE5FE5B0236AA3C11961|许巍_蓝莲花(2005北京演唱会)_live_04.rmvb|
qvod://25185336|FC23115242494CD039ABE3E0FE26000C46F647B1|许巍_旅行现场版_05.rmvb|
qvod://15547720|EDAD2D9926D0E7A9C109F342B64C434AEDCD13FE|许巍_曾经的你_LIVE_06.rmvb|
qvod://23783117|1281720532276065A53F221B5848C67E59391113|许巍_故乡_绝版青春演唱会现场版_07.rmvb|
qvod://21375080|580F55C1166C6F4E238A231D07E3568C7537207A|许巍_爱_01.rmvb|
qvod://17281102|353CCAD9913C779F9D5AFF13E7AD523568E2331F|许巍_故事_02.rmvb|
qvod://23589892|04A4E5573F7017C2AFDFD97F56A970858BB57407|许巍_礼物_03.rmvb|
qvod://32091361|8D1569E40D975FAB300EBE5FE5B0236AA3C11961|许巍_蓝莲花(2005北京演唱会)_live_04.rmvb|
qvod://25185336|FC23115242494CD039ABE3E0FE26000C46F647B1|许巍_旅行现场版_05.rmvb|
qvod://15547720|EDAD2D9926D0E7A9C109F342B64C434AEDCD13FE|许巍_曾经的你_LIVE_06.rmvb|
qvod://23783117|1281720532276065A53F221B5848C67E59391113|许巍_故乡_绝版青春演唱会现场版_07.rmvb|
qvod://444996021|4F9C0A179ABB5767B5A62C3402DDD98C06C18511|许巍2005留声十年绝版青春北京演唱会_DVD.rmvb|
WebService 接口地址:http://www.cnemoney.com/searchService.dll/soap/IqvodsearchService
使用方法:QvodSearch.exe <关键字>
例如:QvodSearch.exe 许巍
得到如下结果:
qvod://21375080|580F55C1166C6F4E238A231D07E3568C7537207A|许巍_爱_01.rmvb|
qvod://17281102|353CCAD9913C779F9D5AFF13E7AD523568E2331F|许巍_故事_02.rmvb|
qvod://23589892|04A4E5573F7017C2AFDFD97F56A970858BB57407|许巍_礼物_03.rmvb|
qvod://32091361|8D1569E40D975FAB300EBE5FE5B0236AA3C11961|许巍_蓝莲花(2005北京演唱会)_live_04.rmvb|
qvod://25185336|FC23115242494CD039ABE3E0FE26000C46F647B1|许巍_旅行现场版_05.rmvb|
qvod://15547720|EDAD2D9926D0E7A9C109F342B64C434AEDCD13FE|许巍_曾经的你_LIVE_06.rmvb|
qvod://23783117|1281720532276065A53F221B5848C67E59391113|许巍_故乡_绝版青春演唱会现场版_07.rmvb|
qvod://21375080|580F55C1166C6F4E238A231D07E3568C7537207A|许巍_爱_01.rmvb|
qvod://17281102|353CCAD9913C779F9D5AFF13E7AD523568E2331F|许巍_故事_02.rmvb|
qvod://23589892|04A4E5573F7017C2AFDFD97F56A970858BB57407|许巍_礼物_03.rmvb|
qvod://32091361|8D1569E40D975FAB300EBE5FE5B0236AA3C11961|许巍_蓝莲花(2005北京演唱会)_live_04.rmvb|
qvod://25185336|FC23115242494CD039ABE3E0FE26000C46F647B1|许巍_旅行现场版_05.rmvb|
qvod://15547720|EDAD2D9926D0E7A9C109F342B64C434AEDCD13FE|许巍_曾经的你_LIVE_06.rmvb|
qvod://23783117|1281720532276065A53F221B5848C67E59391113|许巍_故乡_绝版青春演唱会现场版_07.rmvb|
qvod://444996021|4F9C0A179ABB5767B5A62C3402DDD98C06C18511|许巍2005留声十年绝版青春北京演唱会_DVD.rmvb|
搜索结果:共 15 条
5.使用VBScript访问WebService
如果安装了Microsoft SOAP Toolkit Version 3
,可以用VBScript
访问WebService
,代码如下:
set
soapclient = CreateObject("MSSOAP.SoapClient30")
call
soapclient.mssoapinit("http://localhost/TestService.asmx?WSDL")
Wscript.
Echosoapclient.HelloWorld()
Wscript.
Echosoapclient.ToHex(255)
当然,访问WebService
最方便的方法还是用.Net
或者Java
。
源码:点击下载本文相关源码