在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();
}
以上資料整理來自網絡,感謝原做者。