免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
在C++中使用soap toolkit訪問Web Service

 在C++中使用soap toolkit訪問Web Service,一般要用到以下幾個接口:

  • ISoapConnector
  • ISoapSerializer
  • ISoapReader
      這三個接口顧名思義。ISoapConnector實現(xiàn)了在對象之間發(fā)送和接收SOAP消息的傳輸協(xié)議;ISoapSerializer用于序列化(串行化),創(chuàng)建、封裝SOAP消息;ISoapReader用于讀取SOAP消息,將SOAP消息解析為一個DOM模型,并提供了一系列操作該DOM模型的方法。
      使用Soap Toolkit的應用程序,需要引入動態(tài)庫MSSOAP1.dll(當前最新版本是Soap Toolkit3.0:MSSOAP3.dl),同時還需要msxml3.dll用于解析DOM和XML。在程序的開頭可以這樣來引入相關的文庫和名稱空間:
      #import "msxml3.dll" 
      using namespace MSXML2;
      #import "D:/Program Files/Common Files/MSSoap/Binaries/MSSOAP1.dll" /
      exclude("IStream", "ISequentialStream", "_LARGE_INTEGER", "_ULARGE_INTEGER",
                  "tagSTATSTG", "_FILETIME") 
      using namespace MSSOAPLib;
 
      廢話少說,覺得還是來分析一段示例代碼比較實在。 假設在Web服務器上(如http://localhost/MyTestWebService/),有一個名為Loginout的Web服務,并提供了一個Web Mothod,原型如下:
string LoginTest(string strIP, int nPort);
      下面的代碼說明了如何來訪問該Web服務。    

 ISoapConnectorPtr Connector; 
 ISoapSerializerPtr Serializer; 
 ISoapReaderPtr Reader; 
 // 與Web服務連接
 Connector.CreateInstance(__uuidof(HttpConnector)); 
 Connector->Property[L"EndPointURL"] =
                  _variant_t( "http://localhost/MyTestWebService/Loginout.asmx"); 
 HRESULT result = Connector->Connect();
 // 創(chuàng)建SoapSerializer對象
 Serializer.CreateInstance(__uuidof(SoapSerializer));
 // 將serializer連接到connector的輸入字符串
 Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));

 Connector->Property["SoapAction"] = "http://tempuri.org/LoginTest"
 // 開始soap消息
 Connector>BeginMessage();
 // 創(chuàng)建SOAP消息
 Serializer->startEnvelope("","",""); 
 Serializer->startBody(""); 
 Serializer->startElement("LoginTest","http://tempuri.org/","",""); 
 Serializer->startElement("strIP","http://tempuri.org/","",""); 
 Serializer->writeString("192.168.1.170"); 
 Serializer->endElement();
 Serializer->startElement("nPort","http://tempuri.org/","",""); 
 Serializer->writeString("8000"); 
 Serializer->endElement(); 
 Serializer->endElement(); 
 Serializer->endBody(); 
 Serializer->endEnvelope();
 // 將該soap消息發(fā)送給web服務
 Connector->EndMessage();
 // 讀取響應soap消息
 Reader.CreateInstance(__uuidof(SoapReader));
 // 將reader聯(lián)接到connector的輸出字符串
 Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), ""); 
 DWORD dwRt = GetLastError();
 // 顯示結果
 printf("Soap return result: %s /n",(const char *)Reader->RPCResult->text);

 CoUninitialize();  

      上面程序將打印出Web服務的返回值。
      幾點說明:
  1. http://localhost/MyTestWebService/Loginout.asmx 是提供Web服務的URL。
  2. "http://tempuri.org/"是Web服務所屬的名稱空間(如果Web服務提供者沒有指定名稱空間,將會使用該默認名稱空間)。
  3. 設置Property時的SoapAction就是要調用的WebMethod“http://tempuri.org/LoginTest"。我覺得稱作SoapOperation似乎更好理解些。
  4. Reader->RPCResult->text是調用WebMethod的string類型返回值。如果要讀取返回的參數(shù)或復雜對象,可以使用ISoapReader的相關方法。
  5. 另外,按上述方法,如果相關參數(shù)中含有中文,service服務器接收到的相應內容可能會是亂碼!例如我做demo時server端是基于.NET的,字符串肯定是Unicode,以兩個字節(jié)表示;而soap toolkit默認的xml編碼規(guī)則是UTF-8(使用該編碼,雖然也稱為Unicode,但是漢字會被編碼為2到3個字節(jié)不等),這就產生了沖突。解決的辦法是soap調用startEnvelope()時第三個參數(shù)指定encoding:UTF-16,這樣所有字符均是以2個字節(jié)編碼。
  6. 1.導入類型庫
    2.需要創(chuàng)建一個SoapConnector
    3.下一步創(chuàng)建SoapSerializer
    4.下一步把消息附加到SoapConnector的輸入流
    5.下一步讀取結果.要讀取服務器的回復,客戶端應用需要使用SoapReader,
    6.SoapReader被連接到SoapConnector輸出流
    7.用IXMLDOMElement對象可以從SoapReader里讀到服務器的回復
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
使用SOAP開發(fā)java web服務--Axis開發(fā)方案
網絡服務
Web Service 與 SOA 關系 區(qū)別
產生msxml3.dll 錯誤 '800c0005'有以下幾種原因:
J2EE Web服務開發(fā)系列之六: 使用Handler來增強Web服務的功能
架構Web Service基礎:什么是Web服務?_架構Web Service基礎:什么是...
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服