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

}

 

以上資料整理來自網絡,感謝原做者。

相關文章
相關標籤/搜索