亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > XML > 正文

可靠的 XML Web Service (1)

2024-09-05 20:55:53
字體:
來源:轉載
供稿:網友
國內最大的酷站演示中心!
可靠的 xml web service
eric schmidt
microsoft corporation,xml core services 組,項目經理
2001 年 12 月 11 日

下載此專欄的示例代碼。

注意:要下載與本文相關的代碼,您需要:
visual studio .net release candidate(英文)
sql server 2000(英文)
在 pdc 上,我談論了有關可靠的 xml web service(web 服務)的話題,這個話題源于過去一年來的多次交流。在有關建立 xml web service 的眾多常見問題中,可靠性問題是開發人員實現分散式 web 服務所面臨的五個最重要的問題之一。如果分開來講,這個問題并不是太難,因此,本月我準備談一談建立可靠的 xml web service 這一棘手的問題。

概述
global xml web services architecture(gxa [英文])最突出的一面就是可以使用可合成處理協議擴展該體系結構。這些協議主要通過 soap 標頭實現,可以提供包括安全性、加密、路由和可靠性的廣泛服務。當您開始構建基于 gxa 的應用程序時,您將發現 gxa 實質上是一種消息處理體系結構,它通過基于標準的編碼技術 (soap) 在系統和服務之間提供協同工作能力。到目前為止,大部分實現工作都集中在 soap 1.1 和 wsdl 兼容服務上,因此 web 服務實現方案可以與多種語言和操作系統協同工作。

這是一個了不起的概念。任何兩個系統之間都能夠進行交流,只要它們能夠分析 xml 并理解 soap 規范的規則。但是,簡單的消息交換并不能滿足復雜的業務應用程序的需要。真正的應用程序(不管其內部域體系結構如何)均需要標準化的服務,例如處于 web 服務消息處理層上的安全性、授權和可靠性。在 global xml web services architecture(具體地說就是 soap、soap 模塊和基礎結構協議)的創建和實現背后有一個巨大的動力。隨著今年十月份四項新規范(ws-routing、ws-referral、ws-licensing 和 ws-security)的發布,我們已經開始著手下一代 xml web service 實現工作。盡管發布了這么多的新規范,但仍有兩個領域尚無公共規范,即事務處理和可靠的消息處理,這主要是因為這些基礎結構協議依賴于底層 soap 模塊。

本專欄主要從 gxa 環境的角度討論可靠性和可靠的消息處理的含義。而且我還要花一些時間探討通過在 .net 框架中擴展現有 web 服務類來開發可靠性協議需要做些什么。本專欄有兩個主要目的:

讓讀者了解可靠性概念,為以后各種規范的實施做好準備。請注意,本文不是規范,而只是一篇文章,旨在引發讀者思考下面要討論的問題。
說明 .net 框架中 web 服務和 soap 類強大的、基于標準的功能。
xml web service 的可靠性
我們把問題分開來講。我們前面講過,gxa 服務實現方案屬于消息處理服務,它們需要在分散式環境中發送和接收基于標準的編碼消息。在 web 服務實現方案中發送 soap 消息的主要傳輸協議是 http,它易于實現和管理,但本身不可靠。我們無需深入探討 http 不可靠的具體原因,但只要知道 http 沒有基于標準的服務來保證終點或服務器能夠接收到請求就足夠了。盡管內置的網絡層設備可以在發生一般災難性故障(例如未找到資源)時產生錯誤,但是卻沒有機制可以確保客戶端能夠以可靠的方式接收請求或響應。

通常是通過簡單的重新發送操作處理 http 故障,但在業務處理環境中這既不利于提高效率也沒有效果。它導致不必要的通信量,并增加了重復交易的風險。

目前市場上有多種能夠更有效解決此問題的消息處理技術,包括傳輸協議(如 httpr)、企業基礎結構(如 msmq 和 mq series)以及業務處理協議(如 ebxml)。盡管每種技術針對特定的實現方案各有優點,但都不能以可在所有傳輸協議上跨域應用的可擴展方式解決可靠性問題;而且,在消息交換和處理方面的功能層次上也不盡相同。

面對所有這些問題,我決定總結一個需求列表,看一看在 web 服務環境中實現可靠性原型需要做哪些工作。

以下是我自己創建的可靠性層的主要需求列表:

基于標準并應用于消息協議層
確認發送
有序發送
對稱對話
加快異步處理
基于標準
該協議必須由現有的基于標準的技術組成。而且,該協議還應該對 soap 1.1 規范進行擴展,然后應用到消息編碼層而不是傳輸層。這樣,消息才能夠在所有可用的機制(從 http 到某些專用套接字實現方案)上進行傳輸。

確認發送
為了有章可循,該協議必須采用某種發送確認機制,也就是說,使用該協議發送的消息應當從處理器接收一個且只有一個關于該消息狀態的確認信息。

有序發送
有序發送引入了對話概念,即客戶端和服務器可以交換消息和確認(確認也是可唯一標識的對話的一部分)。收到消息后,將檢查消息以進行排序,確保處理器收到一組有序的消息。

對稱對話
建立在對話機制之上的協議,還必須確保消息和確認的對稱性。必須確保每條消息只被處理一次,并且只生成一個確認。

加快異步處理
這是需求列表中最重要的一點,所以留在最后說明。http 是基于同步請求響應模型的,適用于處理任務量小或運行時間短的簡單應用程序。web 服務實現方案有一個不太高明的小秘密,即用戶不需要從處理的角度了解服務是如何在后端實現的。也就是說,web 服務實現方案處理一個請求可能只需要三秒鐘,也可能會花上三個小時。這導致消息處理體系結構效率低下,且無法擴縮。我們需要的是一個能夠加快異步消息處理體系結構的處理模型。但是要注意,異步模型實現方案要比緊耦合的請求響應實現方案復雜得多,因為它需要更多的基礎結構。

我來解釋一下。在使用標準 http 的同步消息處理模型中,客戶端在向服務器發送請求后、從服務器接收到響應之前一直保持停滯狀態。在這段時間內,可能會發生許多災難性事件:

連接可能會因外部原因而斷開,從而丟失請求或響應。
服務器可能會因脫機或過載而超時。
服務器進程可能取決于下行服務,而這種服務的響應時間無法控制。
同步模型


圖 1:同步模型

不管問題是與網絡有關還是與應用程序有關,要確??煽啃远夹枰獙崿F某種附加協議驅動的基礎結構。在本次討論中,我想著重講述消息是如何在傳輸層上進行處理的。傳輸層是獨立于應用程序的關鍵部分,使用它可以實現可靠性層,并將消息的最終處理過程分離出來。更具體一點來說,每一條消息(不管針對哪種應用程序)都需要從網絡層上讀取,并分配至適當的應用程序資源。我們可以在這里添加一個發送可靠性確認和執行持續存儲的附加協議,這樣應用程序資源就可以選擇處理該消息的時間和方式。而且,這個新協議可以幫助我們分離或加快異步處理模型。下面將解釋如何完成此過程。

在下面的異步模型中,某一請求被發送至 soap 服務器。服務器從網絡層上讀取該消息流,并立即向客戶端返回 http 202 響應。此進程僅就向服務器發送消息的時間而言是同步的,這樣可以減少與連接有關的問題。到達服務器后,消息將被傳送到可靠性層,在這里進行檢查以驗證消息是否過期、重復和有序。然后,消息被持續存儲(在關系數據庫中),并向客戶端發送有關其狀態的確認。最后,消息將被分配至正確的應用程序功能。

異步模型


圖 2:異步模型

在 http 環境中,您可以控制向客戶端發送響應的時間。通過控制向客戶端發送響應的時間,您可以將下行處理影響通信可靠性的風險降到最低。在 soap 中,這是通過單向消息傳遞實現的。它指示底層 soap 處理器立刻向客戶端發送 http 202 響應,通知客戶端已收到消息,并已成功地將消息分配給正確的資源進行處理。之后,處理器向客戶端發送有關該消息狀態的響應。本文稍后將對這種模型的優點進行詳細介紹。

建立可靠性層
明確了上述要求之后,我們來討論如何使用 .net 框架為 web 服務實現方案建立可靠性協議。根據上述要求,我建立了一個小型 api,以便提供可用的實現方案。

協議:ericrp
第一個問題是定義如何分解可靠性協議 (ericrp)。以下是該協議的關鍵之處:

該協議是用于教學的原型。
該協議主要是通過擴展 soap 消息處理層在 soap 處理層上執行的。
soap 標頭用于對處理層所需信息進行編碼。
該協議要求實現方案具有某種方式的持續存儲,以便記錄消息。本實現方案使用的是 microsoft sql server 2000。
注意:不管采取哪種方式在 soap 環境中實現可靠性層,除了 soap 分析器之外,都還需要其他基礎結構。
該協議支持對話概念,也就是說可以對多條消息進行排序,從而保證有序的發送。
該協議的全部實現方案都由 ericrp 名稱空間限定。
ericrp 基于兩方對話方案,即兩個服務可以通過 xml web services 體系結構(http、soap 和 wsdl)進行對話。
客戶端負責消息的所有更正。(本文后面有詳細論述)
服務器只負責基于特定標準發送確認。
服務器不記錄收到的過期消息。
服務器不記錄收到的無序消息。
服務器不記錄收到的重復消息。
處理 api
在這個原型中,我建立了六個主要的類和一個小型數據庫。我將類稱為處理 api。web 服務客戶端和服務器將使用這些類監控和更正使用 ericrp 可靠性協議的消息。所有的類都屬于 ericrp 名稱空間:

client.conversationmanager:由客戶端使用,創建 web 服務消息關聯和消息監控的對話環境。
client.rpclienttrace:由 web 服務客戶端使用,這些客戶端的方法對出站消息執行 ericrp 可靠性協議。
server.conversationmanager:由 web 服務服務器使用,記錄并處理入站消息。
server.rpservertrace:由 web 服務服務器使用,這些服務器的方法對入站消息執行 ericrp 可靠性協議。
reliabilityinfo:具有雙重作用。它可以由 client.conversationmanager 使用,為記錄提供可靠性信息;也可以由 web 服務客戶端代理使用,為出站消息創建必要的 soap 標頭信息。
acknowledgment:由 server.conversationmanager 使用,向客戶端發送確認。
ericrp 的工作原理
在查看代碼之前,我想先從用戶的角度說明該協議的工作原理。例如,我有一個簡單的 web 服務代理類,通過它可以向 web 服務發送訂單消息。打算使用 api 的客戶端需要執行以下操作:

首先,創建 client.conversationmanager 類的實例并開始一個新對話。例如:

private void begin()
{
rpclient = new ericrp.client.conversationmanager();

rpclient.messagesent += _
   new ericrp.client.conversationmanager.messagesenteventhandler(process);

rpclient.conversationstarted += new _
   ericrp.client.conversationmanager.conversationstartedhandler(constarted);
   
rpclient.beginconversation();
}

rpclient 變量在類級別內有效,稍后會用到。我還設置了一些事件處理程序。

下一步,使用訂單代理并配合 reliabilityinfo 類,發送一條可靠的信息。先創建 purchaseorderproxy 的實例,就象通常為 web 服務客戶端所做的操作一樣。再創建 reliabiltiyinfo 類的實例,將 conversationmanager 傳送給構造函數,然后設置可靠性屬性。需要特別注意的屬性是 maxretry、expiredate 和 ackurl。maxretry 和 expiredate 用于限制消息的活動,防止它無限制地發送;web 服務將在向客戶端發送接收確認時使用 ackurl。設置完這些屬性后,即可設置代理的 reliableheader 屬性并調用所需的方法。

private void sendmessage()
{
clientproxies.purchaseorderproxy po = new clientproxies.purchaseorderproxy();
         
   ericrp.reliabilityinfo rinfo = new ericrp.reliabilityinfo(rpclient);
   rinfo.status = reliabilityinfo.messagestatus.new;
   rinfo.senddate = system.datetime.now;
   rinfo.expiredate = system.datetime.now.addhours(4);
   rinfo.maxretry = 5;
   rinfo.ackurl = "http://localhost:8082/ericrpack/poack.asmx";
         
   po.reliableheader = rinfo;
   po.submitmessage("非常希望他們得到此訂單!");
}

這是為了說明該功能而編寫的一段客戶端測試程序的屏幕快照。注意,我們一共發送了五條消息。第三條消息在到達目的地之前已過期,按照 ericrp 協議,這條消息將被丟棄,服務器不對其進行處理。第四條消息是無序消息,因為服務器并沒有收到有效的第三條消息。在重新發送第三條消息之前,任何后續消息都是無序的。如果重新查詢 client.conversationmanager,您將發現第五條消息也是無序的。



圖 3:客戶端測試程序

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
青青久久aⅴ北条麻妃| 欧美色视频日本高清在线观看| 色妞色视频一区二区三区四区| 国产精彩精品视频| 色综合色综合久久综合频道88| 国产精品成人av在线| 亚洲天堂色网站| 亚洲精品在线视频| 国产欧美日韩91| 亚洲欧美国产另类| 成人午夜在线观看| 日韩在线观看精品| 欧美丰满老妇厨房牲生活| 91在线无精精品一区二区| 国产热re99久久6国产精品| 国产精品免费观看在线| 国产极品jizzhd欧美| 欧美大荫蒂xxx| 欧美激情一区二区三级高清视频| 狠狠躁18三区二区一区| 456国产精品| 国产精品久久久久久久久久久新郎| 亚洲亚裔videos黑人hd| 日产精品99久久久久久| 国产精品自产拍在线观| 深夜福利91大全| 亚洲第一av网站| 亚洲第一级黄色片| 国产精品免费网站| 国模叶桐国产精品一区| 国产成人在线播放| 国产91热爆ts人妖在线| 久久国内精品一国内精品| 久久久久久久久电影| 久久91亚洲精品中文字幕| 久久久久久久久爱| 亚洲成人在线网| 日韩一级黄色av| 中文字幕在线日韩| 欧美日本精品在线| 最新69国产成人精品视频免费| 性欧美xxxx| 亚洲男人第一av网站| 欧美日韩福利电影| 欧美国产日韩一区二区| 色偷偷噜噜噜亚洲男人的天堂| 亚洲精品国产免费| 国产精品一区二区三区在线播放| 中文字幕精品一区久久久久| 性色av一区二区三区在线观看| 欧美特黄级在线| 国产成人一区三区| 91高清视频在线免费观看| 亚洲无亚洲人成网站77777| 欧美贵妇videos办公室| 国产日韩视频在线观看| 久久影视免费观看| 久久久亚洲国产天美传媒修理工| 日韩中文第一页| 国产成人精品av| 国产精品69久久| 亚洲欧美一区二区三区四区| 久久夜精品va视频免费观看| zzjj国产精品一区二区| 国产一区二区色| 亚洲精品一区在线观看香蕉| 91丨九色丨国产在线| 日韩高清av一区二区三区| 国产欧美亚洲精品| 亚洲欧美日韩国产中文| 亚洲欧美中文字幕在线一区| 日韩av电影中文字幕| 亚洲成人性视频| 2019日本中文字幕| 国产精品第1页| 久久久噜噜噜久久中文字免| 欧美另类在线播放| 国产欧美精品va在线观看| 亚洲第一中文字幕| 亚洲第一页自拍| 成人黄色生活片| 欧美综合国产精品久久丁香| 日韩欧美有码在线| 亚洲一区二区三区在线免费观看| 国模精品视频一区二区| 亚洲精品自拍第一页| 国产精品久久久久久久久久久久| 精品国产拍在线观看| 国产精品久久久久久久久男| 国产综合久久久久| 欧美性猛交xxxx乱大交极品| 欧美专区在线视频| 久久久久久久一区二区| 性欧美长视频免费观看不卡| 欧美视频专区一二在线观看| 欧美成人精品激情在线观看| 欧美三级免费观看| 欧美精品亚州精品| 亚洲qvod图片区电影| 亚洲最大福利视频网| 欧美性在线观看| 91久久久精品| 亚洲欧美三级伦理| 久久久999国产精品| 日韩av手机在线| 国产精品嫩草视频| 538国产精品一区二区免费视频| 亚洲bt欧美bt日本bt| 国产精品国产福利国产秒拍| 成人精品视频99在线观看免费| 国产日韩一区在线| 欧美自拍视频在线| 欧美日韩国产成人高清视频| 日韩av最新在线观看| 国产日韩欧美电影在线观看| 日韩三级影视基地| 欧美超级免费视 在线| 欧洲美女免费图片一区| 日韩中文字幕在线播放| 日韩的一区二区| 国产成人短视频| 精品国产欧美一区二区三区成人| 亚洲免费av电影| 日韩中文视频免费在线观看| 日本道色综合久久影院| www.xxxx欧美| 久久久成人的性感天堂| 亚洲精品资源美女情侣酒店| 久久99久久99精品中文字幕| 国产精品久久一区| 日韩av电影手机在线| 亚洲第一中文字幕在线观看| 爽爽爽爽爽爽爽成人免费观看| 91久久精品美女| 91tv亚洲精品香蕉国产一区7ujn| 亚洲精品98久久久久久中文字幕| 日韩精品高清视频| 国产午夜精品麻豆| 大胆欧美人体视频| 成人午夜在线视频一区| 欧美裸体男粗大视频在线观看| 国产精品成人观看视频国产奇米| 亚洲二区中文字幕| 日韩欧美aaa| 97精品视频在线播放| 精品视频在线观看日韩| 久久成人亚洲精品| 91精品国产成人www| 国产精品美女主播在线观看纯欲| 91免费综合在线| 91久久精品国产91久久性色| 国产亚洲xxx| 亚洲va电影大全| 亚洲国产成人久久综合| 97精品在线观看| 日韩免费在线看| 精品久久中文字幕| 久久久久久久一区二区| 国产91在线播放精品91| 日韩精品在线影院| 国产精品精品久久久久久| 成人精品久久一区二区三区| 乱亲女秽乱长久久久| 欧美性高潮在线|