1.gSOAP简介
gSOAP是一个跨平台的,用于开发Web Service服务端和客户端的工具包。
下载地址为:http://gsoap2.sourceforge.net/
 
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]
    public string HelloWorld()
    {
        return "Hello World";
    }
 
    [WebMethod]
    public string ToHex(int num)
    {
        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.exesoapcpp2.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 -tmytypemap.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|
搜索结果:共 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.Echo soapclient.HelloWorld()
Wscript.Echo soapclient.ToHex(255)
 
 当然,访问WebService最方便的方法还是用.Net或者Java

源码:点击下载本文相关源码


本文链接地址: 用gSOAP访问WebService,QVOD搜索神器命令行版
http://qingfengju.com/index.asp?id=290

分类:Win32/C++ 查看次数:5705 发布时间:2012-5-29 23:41:19