• VS2008非托管C++调用wcf(WebService)服务


    在Visual Studio 2008以及以后版本中,微软停止了非托管C++的直接WebService引用。不过ATL Server代码已经托管到开源网站上,我们可以找到ATL Server的源代码,编译出Sproxy.exe,这个工具可以根据wsdl文件来生成非托管的代理类。这个代理类还需要配合一些头文件才能一起使用,这个相关的头文件都包含在ATL Server的源代码内。

    1.第一步需要使用sproxy.exe工具来生成代理类。在vs2008以前的版本,比如vs2005,本身就带有这个命令,但在vs2008版,已经把它给去除了。需要去http://atlserver.codeplex.com/下载ATL_Server源代码并编译产生sproxy.exe工具。

    1.1先把下载好的文件ATL_Server_Source_and_Headers_9_0_70425_Alpha.rar解压出来,然后进入文件夹把include内的文件全部拷贝到vs2008的默认包含文件夹内,如我的路径:“D:ProgramFilesMicrosoft Visual Studio 9.0VCinclude”,拷贝之前最好先把原来的include文件夹备份一下。

    1.2之后用进入“ATL_Server_Source_and_Headers_9_0_70425_AlphasourceSProxy”,用vs2008打开“sproxy.sln”文件,并在vs2008提示下进行版本转换。

    1.3编译运行,生成sproxy.exe文件。

     

    2.为了测试webservice服务,在网上找了一个提供webservice的网站:http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx它提供天气预报服务。它的WSDL文件在这个:http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?WSDL,这是一个xml文件,把这个文件保存为本地文件,名字叫WeatherWS.wsdl。为了方便,假定这个文件和sproxy.exe放在同一个目录下,执行命令

    sproxy.exe /wsdl WeatherWS.wsdl

    就会在同目录下生成WeatherWS.h文件。

    3.打开vs2008,建立一个MFC项目WebService,在WebServiceDlg.cpp文件中添加

    #include "WeatherWS.h"

    using namespace WeatherWS;

    在按钮点击事件中加入下面的测试代码:

    void CWebServiceDlg::OnBnClickedButton1()

    {

           // TODO:在此添加控件通知处理程序代码

           CoInitialize(NULL);

           HRESULT hr = S_OK;

           CWeatherWST<CSoapSocketClientT<>>* m_srv = new CWeatherWST<CSoapSocketClientT<>>;

           CComBSTR cityCode =""; //参数为空默认返回上海的天气情况

           CComBSTR userId ="";

           CComBSTR * bstrOut;

           int size;

           hr =m_srv->getWeather(cityCode, userId, (BSTR * *)&bstrOut, &size);

           if(FAILED(hr))

           {

                  MessageBox(L"调用失败");

           }

           else

           {

                  MessageBox(L"调用成功");

           }

           if (m_srv != NULL)

                  delete m_srv;

           CoUninitialize();

    }

    以上资料整理来自网络,感谢原作者。

  • 相关阅读:
    [POJ 1200]Crazy Search
    [来源不详]删数方案数
    noip搜索模拟题 骰子
    [SDOI2010]地精部落
    [HAOI2008]硬币购物
    BZOJ1009: [HNOI2008]GT考试
    BZOJ1830: [AHOI2008]Y型项链 & BZOJ1789: [Ahoi2008]Necklace Y型项链
    BZOJ1251: 序列终结者
    BZOJ3620: 似乎在梦中见过的样子
    BZOJ4477: [Jsoi2015]字符串树
  • 原文地址:https://www.cnblogs.com/freegodly/p/5364666.html
Copyright © 2020-2023  润新知