青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉,開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

用Visual C++建立SOAP客戶端應用

Posted on 2009-10-19 16:39 S.l.e!ep.¢% 閱讀(1219) 評論(0)  編輯 收藏 引用 所屬分類: SOAP

Soap是一個在信息交換中使用得非常廣泛的協議,使用方便,并直接可與HTTP, SMTP等其它協議一起工作。本文討論如何使用Microsoft SOAP Tookit的C++來建立一個簡單的SOAP客戶端應用。

=========================================================

一、先決條件:

必須熟悉使用COM,特別要熟悉COM中的Smart Pointers。我通過導入方法將COM接口轉換成Smart Pointers。系統必須安裝了Microsoft SOAP Toolkit和Microsoft XML Parser。文末參考一節介紹如何下載工具箱。文末附件可下載本文源程序。

二、SOAP編程基礎:

下面開始介紹一個簡單SOAP應用中所包含的類。在此之前,必需先導入所需的類型庫,然后程序才能夠使用SOAP的類。

導入類型庫:

SOAP中使用的對象和接口都在mssoap1.dll文件中。這個文件在安裝Microsoft SOAP Toolkit 2.0時生成,存在路徑:"C:\Program Files\Common Files\MSSoap\Binaries\MSSOAP1.dll"。用#import將該文件導入到程序中。類型庫的內容在導入時被轉換成COM smart pointers來描述COM接口。因為SOAP完全依賴于XML,因此必需用Microsoft XML Parser來處理XML。Microsoft XML parser在msxml3.dll文件里。這個文件要在導入mssoap1.dll之前導入。

#import "msxml3.dll"

using namespace MSXML2;

#import "C:\Program Files\Common Files\MSSoap\Binaries\MSSOAP1.dll" \

exclude("IStream", "ISequentialStream", "_LARGE_INTEGER", \

"_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME")

using namespace MSSOAPLib;

上面這些代碼是編寫SOAP程序必需包含的。

建立SOAP客戶端應用有以下三步驟:

1- 指定和連接Web服務器。

2- 準備和發送消息。

3- 讀取服務端返回的信息。

下面是在基本SOAP客戶端要使用到的類:

1- SoapConnector:

在客戶/服務模式下,首先要做的事就是連接服務器。SoapConnector類執行客戶端與服務端之間的消息傳送協議。 SoapConnector是一個抽象類,定義了協議執行的接口。事實上, SoapConnector類不定義執行某種特定的傳送協議,例如:MSMQ, MQ Series, SMTP 和 TCP/IP等。 為簡便起見,本文只說明使用HTTP傳送協議,它是由Microsoft SOAP Toolkit 2.0中的HttpConnector 類來執行的。

SoapConnector類使用步驟如下:

a) 創建SoapConnector類對象:

 ISoapConnectorPtr connector;

 Connector.CreateInstance(__uuidof(HttpConnector));

b) 指定Web服務器地址:

指定服務器,要做二件事:選擇HttpConnector的屬性和相應的屬性值。本文示例選用EndPointURL屬性:

 Connector->Property ["EndPointURL"] = "some url pointing to web service";

以下是屬性選項說明(屬性名是大小寫敏感的):

AuthPassword:客戶口令

AuthUser:客戶名

EndPointURL :客戶URL

ProxyPassword: 代理(proxy)口令

ProxyPort :代理斷口

ProxyServer :代理服務器的IP地址或主機名

ProxyUser :代理用戶名

SoapAction:HTTP的抬頭值。這個屬性只使用于低級API。它將忽略SoapClient接口(高級API)中的ConnectorProperty屬性 。

SSLClientCertificateName:指定使用Secure Sockets Layer (SSL)加密協議。語法如下:

 [CURRENT_USER | LOCAL_MACHINE\[store-name\]]cert-name with the defaults being CURRENT_USER\MY (與Microsoft Internet Explorer用法相同)。

Timeout:HttpConnector的超時限制,以毫秒為單位。

UseProxy:定義是否使用代理(proxy)。缺省值為False。如果將這個屬性為真(True),又沒有設置上面的ProxyServer值,代理服務器將使用IE里的代理服務器。此時HttpConnector將不理會IE的"Bypass Proxy"(繞道)設置。

UseSSL:定義是否使用SSL(True 或 False)。此值設置為真時,HttpConnector對象不管WSDL設置是HTTP或HTTPS都用SSL連接方式。若此值設置為非真,HttpConnector對象只在WSDL設置為HTTPS時才用SSL方式連接。

c) 與Web服務器連接:

 Connector->Connect();

d) 指定動作:

Connector->Property ["SoapAction"] = "some uri";

e) 啟動消息句柄:

必需在SoapSerializer(消息準備函數)之前先啟動消息處理機制

Connector->BeginMessage();

在消息處理完畢之后,用EndMessage()函數將消息送往服務器。

.

.

[ 消息準備代碼 ]

.

.

Connector->EndMessage();

以上就是與服務器連接的過程。下面介紹如何創建和準備消息。

SoapSerializer:

用于建立送往服務器的SOAP消息。在與服務器通訊之前,SoapSerializer對象必需先與SoapConnector對象連接。SoapSerializer的初始化函數將建立這個內部連接。初始化代入的參數是InputStream (數據流):

// 創建SoapSerializer對象,并用InputSTream進行初始化。

 ISoapSerializerPtr Serializer;

 Serializer.CreateInstance(_uuidof(SoapSerializer));

 Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));

下面是SOAP請求代碼:

?


someParameterValue


SOAP請求被安放在標記之中。是SOAP文件的主標記。SOAP信息通常都安放在”信封“(Envelope)里。信封里的標記中安放信息體,其中包含具體請求。在C++里,用相應的方法來解釋這些標記并定義有關的值。

下面的代碼說明如何使用這些方法:

Serializer->startEnvelope("SOAP","","");

// 開始處理SOAP消息。第一個參數是命名空間,缺省為SOAP-ENV。

// 第二個參數定義URI。第三個參數定義Serialzier->startBody("")函數的編碼方式。

// 開始處理元素,第一個參數是URI的編碼類型,缺省為NONE。

Serializer->startElement("someMethodName","","","m");

// 開始處理Body里的子元素。

// 第一個參數是元素名。第二個參數是URI。

// 第三個參數編碼類型。第四個參數是元素的命名空間。

Serializer->WriteString("someParameterValue")

// 寫入元素值

在上面的每個startXXX函數后都要又相應的endXXX函數來結尾。消息做完之后,連接器就調用endMessage()方法將消息發送到服務器。

至此,我們已經連接了服務器,制作了相應的消息。最后一個步驟就是接收服務器回應。

SoapReader:

讀取服務器返回的信息,將信息解析之后裝入DOM,為進一步處理所用。下面是服務器返回的SOAP回應信息:

?


someResult


使用OutputStream來讀取SoapReader對象中的信息。(OutputStream接收服務器返回的信息)。

// 創建SOAPReader對象,并連接到outputstream

 ISoapReaderPtr Reader;

 Reader.CreateInstance(_uuidof(SoapReader));

 Reader->Load(_variant_t((IUnknown*)Connector->OutputStream));

// load方法還可以用于加載XML文件或字符串

將回應信息加載到SoapReader對象之后,就可以用它的RPCResult屬性來獲取結果。不過,But RPCResult并不直接返回結果,它返回的第一個實體元素,然后用text屬性讀取該元素屬性值:

Reader->RPCResult->text

三、舉例說明一個簡單的SOAP客戶端應用:

本文示例用www.xmethods.net做服務器。這個服務器指向Yahoo在線信息。

可以在http://www.xmethods.net/ve2/ViewListing.po?serviceid=156找到有關細節。

下面的代碼中要輸入一個參數,即Yahoo的用戶ID。返回結果為0表示離線,1表示在線。

其他細節可參閱:http://www.allesta.net:51110/webservices/wsdl/YahooUserPingService.xml

四、參考:

The SOAP specification Simple Object Access Protocol (SOAP) 1.1 - W3C Note :

http://www.w3.org/TR/SOAP

Microsoft SOAP Toolkit Download :

http://download.microsoft.com/download/xml/soap/2.0/w98nt42kme/EN-US/SoapToolkit20.exe

五:本文示例的SOAP代碼:

#include

#import "msxml3.dll"

using namespace MSXML2;

#import "C:\Program Files\Common Files\MSSoap\Binaries\MSSOAP1.dll" \

exclude("IStream", "ISequentialStream", "_LARGE_INTEGER", \

"_ULARGE_INTEGER", "tagSTATSTG", "_FILETIME")

using namespace MSSOAPLib;

void main()

{

CoInitialize(NULL);

ISoapSerializerPtr Serializer;

ISoapReaderPtr Reader;

ISoapConnectorPtr Connector;

// 連接服務器

Connector.CreateInstance(__uuidof(HttpConnector));

Connector->Property["EndPointURL"] = "

Connector->Connect();

// 啟動消息機制

Connector->Property["SoapAction"] = "uri:allesta-YahooUserPing";

Connector->BeginMessage();

// 創建SoapSerializer對象

Serializer.CreateInstance(__uuidof(SoapSerializer));

// 與輸入流連接

Serializer->Init(_variant_t((IUnknown*)Connector->InputStream));

// 制作SOAP信息

Serializer->startEnvelope("","","");

Serializer->startBody("");

Serializer->startElement("isuseronline","uri:allesta-Yah

ooUserPing","","m");

Serializer->startElement("username","","","");

Serializer->writeString("laghari78");

Serializer->endElement();

Serializer->endElement();

Serializer->endBody();

Serializer->endEnvelope();

// 向服務器發送信息

Connector->EndMessage();

// 讀取回應

Reader.CreateInstance(__uuidof(SoapReader));

// 連接輸出流

Reader->Load(_variant_t((IUnknown*)Connector->OutputStream), "");

// 顯示結果

printf("Answer: %s\n", (const char *)Reader->RPCResult->text);

CoUninitialize();

}

本文附件

http://www.topxml.com/snippetcentral/snippetfiles/v20020425121357.zip


?

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日韩精品免费看| 亚洲一区二区三区久久| 日韩写真在线| 欧美成人免费网| 好吊视频一区二区三区四区| 欧美一级电影久久| 国产婷婷成人久久av免费高清 | 99国产精品久久久久久久成人热| 亚洲在线1234| 韩国三级电影久久久久久| 久久久久久一区| 亚洲美女在线看| 久久亚洲一区二区三区四区| 欧美freesex8一10精品| 一区二区三区视频免费在线观看| 欧美在线视频免费播放| 黑人一区二区| 欧美特黄a级高清免费大片a级| 香蕉久久一区二区不卡无毒影院| 理论片一区二区在线| 亚洲欧美在线免费观看| 欧美色中文字幕| 久久久九九九九| 亚洲一区在线免费| 日韩亚洲一区在线播放| 亚洲国产美国国产综合一区二区| 国产精品久久久久一区二区三区| 久久精品成人一区二区三区| 中文在线资源观看视频网站免费不卡| 亚洲成色www久久网站| 久久夜色撩人精品| 最新高清无码专区| 亚洲国产视频直播| 激情欧美一区二区三区| 国产欧美高清| 国产欧美日韩一区二区三区| 国产精品一区二区黑丝| 国产精品久久九九| 欧美色视频一区| 欧美久久久久久久久久| 中日韩高清电影网| 久久久久天天天天| 久久午夜激情| 久久免费国产精品1| 久久综合电影| 欧美国产先锋| 亚洲神马久久| 黄色国产精品| 亚洲国产视频一区| avtt综合网| 亚洲精选久久| 亚洲深夜福利视频| 欧美成人综合| 国产精品一二一区| 美女日韩在线中文字幕| 久久人体大胆视频| 久久人人爽人人爽爽久久| 久久av二区| 麻豆久久久9性大片| 麻豆av一区二区三区久久| 欧美成人精品一区二区三区| 欧美人与禽性xxxxx杂性| 欧美日韩国产精品一区二区亚洲| 国产精品嫩草99a| 国产一区二区三区视频在线观看| 黄色一区三区| 制服诱惑一区二区| 久久久久久有精品国产| 亚洲高清视频的网址| 一卡二卡3卡四卡高清精品视频 | 亚洲伊人久久综合| 一本久久a久久精品亚洲| 香蕉国产精品偷在线观看不卡| 亚洲精品美女免费| 一区二区三区 在线观看视| 欧美一乱一性一交一视频| 欧美69视频| 日韩视频在线免费| 亚洲欧美一区二区原创| 亚洲手机成人高清视频| 亚洲欧美一区二区精品久久久| 久久精品国产精品亚洲综合| 亚洲欧美视频一区| 欧美a级理论片| 亚洲一区二区日本| 久久另类ts人妖一区二区| 欧美体内谢she精2性欧美| 尤物99国产成人精品视频| 亚洲欧美日韩一区在线观看| 久久国产精品第一页| 日韩午夜电影在线观看| 巨胸喷奶水www久久久免费动漫| 欧美午夜视频一区二区| 亚洲精品影视在线观看| 久久久视频精品| 一区二区三区 在线观看视| 国产欧美一区二区三区在线看蜜臀| 美女诱惑黄网站一区| 欧美三级电影网| 女人香蕉久久**毛片精品| 欧美日韩精品三区| 久久人人97超碰精品888| 欧美精品一区三区| 狂野欧美性猛交xxxx巴西| 欧美日韩免费观看一区二区三区| 久久亚洲精品中文字幕冲田杏梨| 一区二区欧美在线观看| 欧美大学生性色视频| 午夜亚洲福利| 欧美精品一区二区三区蜜桃| 久久久久久一区二区| 欧美午夜精品久久久久久人妖| 麻豆精品视频在线观看| 国产精品久在线观看| 亚洲国产一区二区三区在线播| 国产欧美日韩精品丝袜高跟鞋| 亚洲第一天堂av| 国产毛片一区二区| 亚洲免费电影在线| 亚洲国产美国国产综合一区二区| 亚久久调教视频| 亚洲欧美成人网| 欧美日韩在线视频首页| 亚洲电影免费| 亚洲国产高清aⅴ视频| 欧美在线精品免播放器视频| 亚洲欧美一区二区原创| 国产精品国产三级国产普通话99 | 国产精品一区二区三区观看| 日韩视频免费在线| av成人黄色| 欧美日韩国产亚洲一区| 亚洲经典自拍| 亚洲激情成人网| 麻豆精品视频在线| 欧美高清影院| 亚洲毛片网站| 欧美日韩国产影片| 亚洲精品国产品国语在线app| 亚洲黑丝一区二区| 欧美成人日韩| 亚洲清纯自拍| 在线综合亚洲| 国产精品高潮久久| 亚洲视屏一区| 久久久人成影片一区二区三区观看| 国内偷自视频区视频综合| 欧美一区二区免费观在线| 久久美女性网| 亚洲精品人人| 国产精品麻豆成人av电影艾秋| 午夜日本精品| 欧美福利在线| 亚洲视频二区| 国产欧美一区二区精品仙草咪 | 国产精品久久一区主播| 午夜精品久久久久久久久久久久久| 欧美一级日韩一级| 在线成人免费视频| 欧美激情一区二区三区成人| 一区二区免费看| 久久久久成人精品| 亚洲精美视频| 国产精品igao视频网网址不卡日韩| 亚洲自拍啪啪| 免费影视亚洲| 一区二区三区福利| 国产亚洲在线| 亚洲视频一区二区| 日韩亚洲欧美成人| 欧美精品一区在线发布| 亚洲精品黄网在线观看| 久久不射电影网| 亚洲国产精品国自产拍av秋霞| 欧美另类99xxxxx| 亚洲欧美日韩成人| 欧美不卡高清| 亚洲一区二区在线观看视频| 国产精品性做久久久久久| 亚洲自拍偷拍福利| 亚洲精品国产精品乱码不99| 欧美伊人久久久久久午夜久久久久| 海角社区69精品视频| 欧美另类专区| 久久久精品国产一区二区三区| 亚洲精品日韩精品| 久久免费国产精品| 亚洲欧美日韩一区二区在线| 亚洲黄一区二区| 激情综合网激情| 国产精品一区免费在线观看| 欧美激情二区三区| 欧美有码在线观看视频| 99精品欧美一区二区三区综合在线| 久久夜色精品国产欧美乱极品| 亚洲午夜三级在线| 一区二区三区在线观看欧美| 久久伊伊香蕉| 亚洲成色777777女色窝| 一区二区高清视频在线观看|