實戰演習 如何用wse實現soap訊息路由一

2022-02-01 13:26:46 字數 3019 閱讀 3798

前面的文章中介紹過wse有路由的功能,它能像路由器一樣,將soap訊息動態的路由到指定的目的地,有關wse實現路由的功能描述,請檢視:

wse 3.0

文件翻譯:路由

下面主要通過專案例項來具體闡述如何實現wse路由和一些專案開發中的細節。本人水平有限,有不對的地方,請朋友們不吝賜教。

在開始專案之前,先了解一下路由的概念,所謂"路由",是指把資料從乙個地方傳送到另乙個地方的行為和動作,它通常包括兩種行為:選擇最佳路徑和通過網路交換資料。我們平時使用的路由器就是為了此項功能而產生的機器。那麼wse為何要具備路由的功能呢?這個必須是我們首先要弄明白的問題。

對soa不了解或者沒有相關開發和運維經驗的朋友可能體會不出wse為何要有路由功能的理由,從表面看來,完全沒必要嘛!客戶端指定乙個服務端,雙方交換資料就可以了!非也,在soa中,要面對的往往是部門與部門之間,企業與企業之間,機構與機構之間的系統協作問題,此時如果提供服務的一方出現維修問題,會影響到很多客戶端,而這些客戶端可能分布在不同的個人或者機構中,中間一些協調和溝通問題會很快讓你進入hell,而有些客戶端系統對於系統的穩定性要求極高。所以如果服務端不做傷筋動骨的改動,應該盡最大可能保持客戶端的正常執行。wse的路由功能就是為了解決此類問題的方案之一。一句話它能夠使服務端能夠在對服務進行維護的時候,經過簡單的配置,改變soap訊息的原有路由,從而保證客戶端的穩定執行。

要實現wse的路由功能,有兩種手段:第一是通過配置檔案,這個配置檔案在wse框架中被稱為referral cache.另外一種是基於soap訊息內容來實現。本文首先解決如何通過配置檔案來實現wse路由。

實現wse路由,需要兩個大的步驟:

準備一台路由伺服器(以後我們稱之為r),並對其進行配置

配置乙個referral cache,這個檔案定義了soap訊息的路由資訊

我們通過以下情景來實現專案演示:目前我們存在乙個服務,所在伺服器為s1,因為路由對客戶端沒有影響,所以我們只模擬乙個客戶端,伺服器為c,我們目前的路由情況如下圖所示:

首先我們看一下使用了路由的網路服務,路由,和客戶端程式的特點。

網路服務:使用了路由的網路服務必須接受**於路由伺服器r的請求,因此需指定網路服務的soapactor attribute,為路由的url或者接受所有的**。有關soapactor的描述如下:乙個soap訊息從始節點到終節點的過程中,可能沿著訊息路徑經過一系列soap中間節點。乙個soap中間節點是乙個可以接收**soap訊息的應用程式。中間節點和終節點由uri區分。可能soap訊息的終節點並不需要所有部分,而在訊息路徑上的乙個和幾個中間節點可能需要這些內容。頭元素的接收者扮演的角色類似於乙個過濾器,防止這些只發給本接受者的訊息部分擴散到其它節點。即乙個頭元素的接收者必須不**這些頭元素到soap訊息路徑上的下乙個應用程式。同樣的,接收者可能插入乙個相似的頭元素。soap actor全域性屬性可以用於指示頭元素的接收者。soap actor屬性的值是乙個uri。省略soap actor屬性表示接收者是soap訊息的終節點

對網路服務的建立和設計需要注意的地方如下圖:

除了此處,網路服務和其他的使用wse3.0的服務,沒有區別。

再看一下路由,路由程式是乙個非常特殊的程式,他可以沒有任何程式,只包含兩個配置檔案,這裡主要講述一下如何設定這兩個配置檔案

首先我們先對建立的路由**做wse設定,可以採用wse與vs2005的整合工具。如下圖所示:

這樣就新增了對microsoft.web.services3的引用,需要注意的是,web.config中新增引用的部分必須類似如下

因為這個專案沒有bin目錄,當然如果您打可sp1的補丁,新增引用後,bin目錄會有相關dll,是不需要如上圖所示的。我這裡建立的是**,所以必須如此,因為沒有這個**將無法使用wse,也就無法實現路由的功能了。

對路由**的設定還包括如下操作,它為web.config新增了乙個httphandler,用於處理http請求,您可以自定義httphandler,也可以使用wse3.0預設提供的microsoft.web.services3.messaging.soaphttprouter,新增方法如下:

點選確定後

經過上面的操作,會在web.config新增如下的**:

您也可以手動新增。

建立乙個referral cache檔案,在裡面寫路由配置,如下:

下面說明一下各個節點的意義:

節點是根節點。在乙個配置檔案中有且只有乙個。

節點用於標識乙個特定的路由配置,在乙個配置檔案中可有可無,也可以是多個

節點用於指示**訊息的部分資訊

節點用於指定乙個**資訊的詳細資訊,乙個必須包含乙個或者

節點指定路由的條件,乙個必須有乙個

節點指示重定向的一些資訊,乙個乙個

節點指示訊息重定向到的url位址,乙個至少乙個

節點指示路由配置的唯一標識

設定好referral cache後,需要做如下的設定:

點選確定後,在web.config新增如下**:

部署路由站點的時候,一定要注意要對referral cache給網路使用者(iis6.0中是network service)設定檔案寫許可權,這個是必須的,不要忘記

對於客戶端而言,和其他客戶端沒有區別,只是將訊息的傳送位址設定為路由位址。設定方式如下:

此時,啟動客戶端程式,便可以出現如下圖所示的結果:

表明如第一張圖中所示的三個部分都已經正常工作了。

下面模擬一下路由的優點,當執行網路的伺服器s1需要維修或者系統需要公升級的時候,我們可以按照以下的步驟來進行操作:

第一步:準備好乙個備用伺服器s2,將s2上部署乙個和s1上一樣的環境,並部署網路服務程式。

第二步:準備另外乙個referral cache配置檔案,將其中的中的資訊更改為s2上服務的url位址。

第三部:用新的referral cache檔案替換路由伺服器r上的referral cache

經過這三步,客戶端可以沒有任何的改動和影響。訊息可以照常傳送,但實際的接收方已經變為了s2.

執行客戶端,我們有得到了我們期待的結果

專案檔案

如何用C 實現棧

簡單定義 棧就是一種只允許在表尾進行插入和刪除操作的線性表 舉乙個生活中的例子 我在乙個儲物箱中,堆了一堆衣服,我的一件球衣在最下面,而我要拿這件衣服,就意味著我必須將上面的衣服全部拿出來才可以,但是由於箱子只有乙個口,我也只能從上面拿東西,心裡還默默想著,當初就不該將球衣早早的放進去,導致結果就是...

如何用棧實現佇列功能以及如何用佇列實現棧功能

棧實現佇列的基本思路 構造兩個棧,其中乙個用來存放存進來的資料,另外乙個用來倒置其中的資料實現輸出。public static class twostacksqueue public void add int pushint public intpoll else if stackpop.empty...

如何用seam實現檔案上傳

1.需要兩個seam元件。乙個tomahawk 和slsb用來處理jsf action 的 backing bean 1a.backing bean name uploadbean public class uploadbackingbean notnull public uploadedfile ...