zoukankan      html  css  js  c++  java
  • 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();

    }

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

  • 相关阅读:
    LeetCode 977 有序数组的平方
    LeetCode 24 两两交换链表中的节点
    LeetCode 416 分割等和子集
    LeetCode 142 环形链表II
    LeetCode 106 从中序与后序遍历序列构造二叉树
    LeetCode 637 二叉树的层平均值
    LeetCode 117 填充每个节点的下一个右侧节点
    LeetCode 75 颜色分类
    redhat 7.4 挂载ntfs格式的u盘并且使用
    redhat 查看CPU frequency scaling(CPU频率缩放)
  • 原文地址:https://www.cnblogs.com/freegodly/p/5364666.html
Copyright © 2011-2022 走看看