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

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

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:\ProgramFiles\Microsoft Visual Studio 9.0\VC\include”,拷贝以前最好先把原来的include文件夹备份一下。工具

1.2以后用进入“ATL_Server_Source_and_Headers_9_0_70425_Alpha\source\SProxy\”,用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放在同一个目录下,执行命令spa

sproxy.exe /wsdl WeatherWS.wsdl代理

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

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

#include "WeatherWS.h"xml

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

}

 

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

相关文章
相关标签/搜索