日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC++使用Soap ToolKit3.0调用WebService接口

發布時間:2025/3/21 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC++使用Soap ToolKit3.0调用WebService接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
由于項目需要,需要實現VC調用WebService接口,之前沒接觸過這個,所以花了一天找了點資料,并自己編寫了demo。


???? 1. 首先看了Soap相關資料,見http://www.w3school.com.cn/ws.asp。 調用WebService有幾種方法, 一是直接采用托管方式利用add web Reference,操作非常簡單方便,

但是貌似在VS2008中已無法實現了,所以并沒有做demo。

另外的方法就是非托管的,其中也包括幾種方法,第一種是采用Add web Reference實現,同樣貌似在VS2008里無法實現,資料:http://www.vckbase.com/index.php/wv/1408.

另外一種非托管的方法就是采用Soap ToolKit3.0 SDK實現,這方面資料也很多,http://www.yesky.com/20020517/1611650.shtml

???? 2. demo編寫, 自己編寫的調用天氣預報的Web Service接口

#include "stdafx.h" #import <msxml4.dll> //using namespace MSXML2 #import "C:\Program Files (x86)\Common Files\MSSoap\Binaries\mssoap30.dll" named_guids \exclude("IStream", "IErrorInfo", "ISequentialStream", "_LARGE_INTEGER", \"_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME")using namespace MSSOAPLib30;void Add(LPWSTR cityName) { ISoapSerializerPtr Serializer; ISoapReaderPtr Reader; ISoapConnectorPtr Connector; // Connect to the service. if(FAILED(Connector.CreateInstance(__uuidof(HttpConnector30)))) //創建對象{wprintf(_T("failed"));}Connector->Property[_T("EndPointURL")] =_T("http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl"); //wsdl路徑Connector->Connect(); // Begin the message. //消息體Connector->Property[_T("SoapAction")] = _T("http://WebXml.com.cn/getWeather"); //函數體參數Connector->BeginMessage(); Serializer.CreateInstance(__uuidof(SoapSerializer30)); Serializer->Init(_variant_t((IUnknown*)Connector->InputStream)); // Build the SOAP Message.Serializer->StartEnvelope(_T("Soap"),_T(""),_T("")); Serializer->StartBody(""); Serializer->StartElement(_T("getWeather"),_T("http://WebXml.com.cn/"),_T(""),_T("Soap")); //函數處理Serializer->StartElement(_T("theCityCode"),_T(""),_T(""),_T("Soap"));Serializer->WriteString(cityName); //參數處理 Serializer->EndElement();Serializer->EndElement();Serializer->EndBody(); Serializer->EndEnvelope(); Connector->EndMessage(); Reader.CreateInstance(__uuidof(SoapReader30)); wprintf(_T("here"));Reader->Load(_variant_t((IUnknown*)Connector->OutputStream),""); //加載返回數據// Display the result.MSXML2::IXMLDOMElementPtr pstr = Reader->RpcResult;char buff[1024] ={0};strncpy(buff,pstr->text,1024);printf("Answer:%s\n",buff); }int _tmain(int argc, _TCHAR* argv[]) {CoInitialize(NULL); Add(_T("杭州")); CoUninitialize(); getchar();return 0; }
上述使用還是比較簡單和清晰的,對照著這個http://www.yesky.com/20020517/1611650.shtml資料就行了。一開始我使用

using namespace MSXML2
出現好多錯誤:

e:\vc工程\vcstudy\webservice\webservice\debug\mssoap30.tlh(324) : error C2872: 'IXMLDOMNode' : ambiguous symbol
1>??????? could be 'c:\program files\microsoft sdks\windows\v6.0a\include\msxml.h(531) : IXMLDOMNode'
1>??????? or?????? 'e:\vc工程\vcstudy\webservice\webservice\debug\msxml4.tlh(2837) : MSXML2::IXMLDOMNode'

最后把該命名空間的語句去掉,用手寫實現

MSXML2::IXMLDOMElementPtr pstr = Reader->RpcResult;

效果:



3. 關于客戶端不需要安裝Soap ToolKit3.0 SDK而能運行程序的方法,見:http://blog.1wanweb.com/post/vc2b2b60-mfc-soapsdke5bc80e58f91websesrvicee68993e58c85.aspx。


總結

以上是生活随笔為你收集整理的VC++使用Soap ToolKit3.0调用WebService接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。