2011-10-27 37 views
1

這是可能的(使用行爲和IClientMessageInspector.BeforeSendRequest)在發送消息之前更改通信通道嗎?WCF保持活躍和備份策略

我需要改變這一點,因爲我有我的代理備份/主要策略。

+2

簡短答案是否定的 - 一旦創建通信通道,它就不能被修改。 'IClientMessageInspector.BeforeSendRequest'通常用於與消息相關的操作,而不是通道。你究竟想要做什麼?人們可能會提出建議。 – Tim

+0

我想爲我的wcf頻道實施高可用性策略,它檢測主要主機何時關閉並重新連接到另一個服務(這將在某些xml中指定)。 讓我知道是否有任何包裝wcf調用來實現這一點的dll。 我看到了大量有關WCF的主題並保持活躍的策略,但我從來沒有看到這個優雅的解決方案... – user986499

回答

0

根據您的評論,這聽起來像您希望能夠在主服務處於脫機狀態時在呼叫中間切換服務終端。我不認爲有什麼辦法可以做到這一點 - 至少不夠優雅。

一旦建立了通信通道,它幾乎被設置,直到關閉(或中止)爲止。無法將其從一個端點切換到另一個(備份)端點 - 您甚至無法通過創建新通道來完成此操作,因爲代理仍將使用主要端點。

根據我對WCF的理解,最接近你可能會發現主要服務沒有響應(很可能是通過超時),然後它可以切換到配置爲輔助/備份服務。現在

,你可能能,內IClientMessageInspector.BeforeSendRequest做一些檢查,看看是否在服務響應,並且如果它不響應嘗試生成與備份服務端點的新代理,並有發送消息。 .. 但是我不知道這是否會起作用,即使它做到了,也會讓我覺得有點混亂。

最簡單的解決方案是,如果主要終端處於關閉狀態,客戶端只需切換到備用服務端點即IMO。

0

舊線程,但供將來參考。

我想WCF路由(.NET4)就是你要找的名字空間「System.ServiceModel.Routing.RoutingService」。例如,在本頁搜索「高可用性」,Practical Messaging Scenarios with WCF 4

1:「備份列表向路由服務指出,如果主要端點OneWayService1不可用(即它無法響應),則路由服務應嘗試每個後續端點以OneWayService2開頭並以OneWayService4直到服務響應。「