C++调用WebServer(vs2010实现)

本文详细介绍如何使用gSOAP工具包将C++接口转换为SOAP WebService,包括下载gSOAP、配置环境、生成C++接口及在VS2010中测试天气预报WebServer的六个接口函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步、使用gsoap工具打包C++接口,测试webserver(天气预报):http://ws.webxml.com.cn/WebServices/WeatherWS.asmx

1.1、首先下载gsoap打包工具,下载地址:https://download.youkuaiyun.com/download/cwj066/11484761

1.2、把下载的gsoap-2.8.87.rar 解压到任意目录,解压出来的目录为gsoap-2.8。

1.3、打开windows下载的命令终端,进到目录xx:\gsoap-2.8\gsoap\bin\win32。如下所示:

1.4、在win32目录下新建wsmap.bat文件,里面写入xsd__string = | std::wstring | wchar_t*。

1.5、在终端输入命令:.\wsdl2h.exe -o .\Webservice.h http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl,(接口地址后面一定要加?wsdl)。然后回车。就会在win32目录下生成Webservice.h文件

1.6、接着输入命令:.\wsdl2h.exe -o .\WeatherWS.h http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl -t wsmap.bat,把WeatherWS.h文件中的 char* 替换成 wchar_t* ,解决传输数据是中文乱码。

1.7、接着输入命令:.\soapcpp2.exe -C .\WeatherWS.h -I .\..\..\import –x,生成完整的C++接口。此时在win32目录下会自动生成soapC.cpp、soapClient.cpp、soapClientLib.cpp、soapH.h、soapStub.h、WeatherWS.h、WeatherWSSoap.nsmap。

当看到Compilation successful时,表明生成C++接口成功。

1.8、在浏览输入http://ws.webxml.com.cn/WebServices/WeatherWS.asmx 可以看到此webserver的所有接口函数。

在上图中可以看到,此webserver总共有6个接口函数,每个函数的功能、函数输入参数、输出参数写的非常详细。最后在我们的win32目录下找到soapClient.cpp 并打开,此时我们也可以看到6个接口函数,分别对应webserver的6个接口函数。soapClient.cpp 中的6个函数名分别为soap_call___ns1__getRegionDataset、soap_call___ns1__getRegionProvince、soap_call___ns1__getSupportCityDataset、soap_call___ns1__getWeather、soap_call___ns1__getRegionCountry、soap_call___ns1__getSupportCityString在我们的工程中分别调用这6个接口函数就可以获取webserver的数据。下面在vs2010测试这6个接口函数。

第二步、使用vs2010新建一个测试工程,测试生成的C++接口文件。

2.1、使用vs2010新建win32控制台程序,名字为test6。

2.2、把刚刚在win32目录下生成的文件导入到工程,导入的文件分别为soapH.h、soapStub.h、WeatherWSSoap.nsmap、soapC.cpp、soapClient.cpp,最后把gsoap-2.8\gsoap目录下的stdsoap2.h、stdsoap2.cpp也导入到工程,结果如下图所示。

2.3、在test6.cpp引入soapH.h、WeatherWSSoap.nsmap文件

2.4、测试6个接口函数,在mina函数调用接口。

2.4.1、调用soap_call___ns1__getRegionProvince接口获取中国的所有省份。代码如下

//1.SOAP的客户端
soap m_oSoap;

//2.WebService调用对象
_ns1__getRegionProvince getMobileCodeObject;

//3.WebService返回对象
_ns1__getRegionProvinceResponse getMobileCodeResponseObject;

//4.SOAP初始化
soap_init(&m_oSoap);

//5.发送WebService请求,获取中国的所有省份
int nResult = soap_call___ns1__getRegionProvince(&m_oSoap, NULL, NULL, &getMobileCodeObject, getMobileCodeResponseObject);    

//6.操作成功
if(SOAP_OK == nResult)
{
    // 输出返回结果
    std::vector<std::wstring> vResult = getMobileCodeResponseObject.getRegionProvinceResult->string;
    int iSize = vResult.size();
    for (int i = 0; i < iSize; i++)
    {
        string sProvince = ws2s(vResult[i]);  //输出省份

        cout << sProvince << endl;
    }
}

测试结果如下:

2.4.2、调用soap_call___ns1__getRegionCountry接口获取国家。代码如下

//1.SOAP的客户端
soap m_oSoap;

//2.WebService调用对象
_ns1__getRegionCountry country;

//3.WebService返回对象
_ns1__getRegionCountryResponse result;

//4.SOAP初始化
soap_init(&m_oSoap);

//5.发送WebService请求,获取中国的所有省份
int  nResult = soap_call___ns1__getRegionCountry(&m_oSoap, NULL, NULL, &country, result);

//6.操作成功
if(SOAP_OK == nResult)
{
    // 输出返回结果
    std::vector<std::wstring> vResult = result.getRegionCountryResult->string;
    int iSize = vResult.size();
    for (int i = 0; i < iSize; i++)
    {
        string sCountry = ws2s(vResult[i]);  //输出国家
        cout << sCountry << endl;
    }
}

测试结果如下:

2.4.3、调用soap_call___ns1__getWeather接口获取某个城市的天气情况。代码如下

//1.SOAP的客户端
soap m_oSoap;

//2.WebService调用对象
_ns1__getWeather weather;  //theRegionCode
weather.theCityCode = L"755";

//3.WebService返回对象
_ns1__getWeatherResponse rs;

//4.SOAP初始化
soap_init(&m_oSoap);

//5.发送WebService请求,获取中国的所有省份
int  nResult = nResult = soap_call___ns1__getWeather(&m_oSoap, NULL, NULL, &weather, rs);

//6.操作成功
if(SOAP_OK == nResult)
{
    // 输出返回结果
    std::vector<std::wstring> vResult = rs.getWeatherResult->string;
    int iSize = vResult.size();
    for (int i = 0; i < iSize; i++)
    {
        string sWeather = ws2s(vResult[i]);

        cout << sWeather << endl;
    }
}

//7.关闭SOAP
soap_destroy(&m_oSoap);
soap_end(&m_oSoap);
soap_done(&m_oSoap);

测试结果如下:

剩下的3个接口函数,感兴趣的可以自己动手测试。

工程源码下载:https://download.youkuaiyun.com/download/cwj066/11485080

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mark-puls

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值