• 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();

    }

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

  • 相关阅读:
    GO 锁
    GO worker pool
    GO sync.Once
    GO channel
    Go sync.Map
    GO select
    GO atomic包
    GO sync.WaitGroup
    ActivatorUtilities.CreateInstance用于各种激活器服务的帮助程序代码。
    IQueryable简单分页的扩展方法
  • 原文地址:https://www.cnblogs.com/freegodly/p/5364666.html
Copyright © 2020-2023  润新知