soap 路由
?
下面主要通過項目實例來具體闡述如何實現wse路由和一些項目開發中的細節。本人水平有限,有不對的地方,請朋友們不吝賜教。
在開始項目之前,先了解一下路由的概念,所謂"路由",是指把數據從一個地方傳送到另一個地方的行為和動作,它通常包括兩種行為:選擇最佳路徑和通過網絡交換數據。我們平時使用的路由器就是為了此項功能而產生的機器。那么wse為何要具備路由的功能呢?這個必須是我們首先要弄明白的問題。
對SOA不了解或者沒有相關開發和運維經驗的朋友可能體會不出wse為何要有路由功能的理由,從表面看來,完全沒必要嘛!客戶端指定一個服務端,雙方交換數據就可以了!非也,在SOA中,要面對的往往是部門與部門之間,企業與企業之間,機構與機構之間的系統協作問題,此時如果提供服務的一方出現維修問題,會影響到很多客戶端,而這些客戶端可能分布在不同的個人或者機構中,中間一些協調和溝通問題會很快讓你進入hell,而有些客戶端系統對于系統的穩定性要求極高。所以如果服務端不做傷筋動骨的改動,應該盡最大可能保持客戶端的正常運行。Wse的路由功能就是為了解決此類問題的方案之一。一句話它能夠使服務端能夠在對服務進行維護的時候,經過簡單的配置,改變soap消息的原有路由,從而保證客戶端的穩定運行。
要實現wse的路由功能,有兩種手段:第一是通過配置文件,這個配置文件在wse框架中被稱為referral cache.另外一種是基于soap消息內容來實現。本文首先解決如何通過配置文件來實現wse路由。
- 通過配置來實現wse路由
實現wse路由,需要兩個大的步驟:
我們通過以下情景來實現項目演示:目前我們存在一個服務,所在服務器為S1,因為路由對客戶端沒有影響,所以我們只模擬一個客戶端,服務器為C,我們目前的路由情況如下圖所示:
首先我們看一下使用了路由的網絡服務,路由,和客戶端程序的特點。
網絡服務:使用了路由的網絡服務必須接受來源于路由服務器R的請求,因此需指定網絡服務的SoapActor Attribute,為路由的URL或者接受所有的來源。有關SoapActor的描述如下:一個SOAP消息從始節點到終節點的過程中,可能沿著消息路徑經過一系列SOAP中間節點。一個SOAP中間節點是一個可以接收轉發SOAP消息的應用程序。中間節點和終節點由URI區分。可能SOAP消息的終節點并不需要所有部分,而在消息路徑上的一個和幾個中間節點可能需要這些內容。頭元素的接收者扮演的角色類似于一個過濾器,防止這些只發給本接受者的消息部分擴散到其它節點。即一個頭元素的接收者必須不轉發這些頭元素到SOAP消息路徑上的下一個應用程序。同樣的,接收者可能插入一個相似的頭元素。SOAP actor全局屬性可以用于指示頭元素的接收者。SOAP actor屬性的值是一個URI。省略SOAP actor屬性表示接收者是SOAP消息的終節點
對網絡服務的創建和設計需要注意的地方如下圖:
??????
除了此處,網絡服務和其他的使用wse3.0的服務,沒有區別。
再看一下路由,路由程序是一個非常特殊的程序,他可以沒有任何程序,只包含兩個配置文件,這里主要講述一下如何設置這兩個配置文件
這樣就添加了對Microsoft.Web.Services3的引用,需要注意的是,web.config中添加引用的部分必須類似如下
因為這個項目沒有bin目錄,當然如果您打可sp1的補丁,添加引用后,bin目錄會有相關dll,是不需要如上圖所示的。我這里創建的是網站,所以必須如此,因為沒有這個網站將無法使用wse,也就無法實現路由的功能了。
對路由網站的設置還包括如下操作,它為web.config添加了一個HttpHandler,用于處理http請求,您可以自定義HttpHandler,也可以使用wse3.0默認提供的Microsoft.Web.Services3.Messaging.SoapHttpRouter,添加方法如下:
??????????
點擊確定后
?????????
經過上面的操作,會在web.config添加如下的代碼:
?????????
您也可以手動添加。
??
下面說明一下各個節點的意義:
<r:referrals>節點是根節點。在一個配置文件中有且只有一個。
<r:ref>節點用于標識一個特定的路由配置,在一個配置文件中可有可無,也可以是多個
<r:for>節點用于指示來源消息的部分信息
<r:exact>節點用于指定一個來源信息的詳細信息,一個<r:for>必須包含一個<r:exact>或者<r:prefix>
<r:if>節點指定路由的條件,一個<r:for>必須有一個<r:if>
<r:go>節點指示重定向的一些信息,一個<r:ref>一個<r:go>
<r:via>節點指示消息重定向到的url地址,一個<r:go>至少一個<r:via>
<r:refId>節點指示路由配置的唯一標識
設置好referral cache后,需要做如下的設置:
點擊確定后,在web.config添加如下代碼:
?
部署路由站點的時候,一定要注意要對referral cache給網絡用戶(IIS6.0中是network service)設置文件寫權限,這個是必須的,不要忘記。
?
對于客戶端而言,和其他客戶端沒有區別,只是將消息的發送地址設置為路由地址。設置方式如下:
此時,啟動客戶端程序,便可以出現如下圖所示的結果:
表明如第一張圖中所示的三個部分都已經正常工作了。
下面模擬一下路由的優點,當運行網絡的服務器S1需要維修或者系統需要升級的時候,我們可以按照以下的步驟來進行操作:
第一步:準備好一個備用服務器S2,將S2上部署一個和S1上一樣的環境,并部署網絡服務程序。
第二步:準備另外一個referral cache配置文件,將其中的<r:go>中的信息更改為S2上服務的Url地址。
第三部:用新的referral cache文件替換路由服務器R上的referral cache
經過這三步,客戶端可以沒有任何的改動和影響。消息可以照常發送,但實際的接收方已經變為了S2.
運行客戶端,我們有得到了我們期待的結果
限于條件所限,本文中在一臺機器中模擬客戶端,路由,和服務端,下載到本地的程序需要更改url才能運行
??????? 還可以通過更改Soap消息內容來實現此種功能,留作下一篇做闡述。
文章來自網絡轉載
轉載于:https://www.cnblogs.com/Struts-pring/p/4259870.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: poj 3104 Drying(二分查找
- 下一篇: C之printf()函数