2013-09-26 41 views
1

我有一個雙工wcf服務,它保存(在內存中)到其客戶端的回調引用列表。在wcf服務上有兩種方法訂閱和取消訂閱。Wcf路由器 - 雙工服務 - 重新訂閱

它的一切工作正常與一個wcf服務器和多個客戶端。當我使用Wcf路由器服務引入兩臺帶有負載均衡的wcf服務器時,問題就開始了。

例如 - 我有兩個wcf服務器(wcf1和wcf2)和一個路由器服務器(r1)。當客戶端調用「訂閱」到路由器端點時,它將該請求廣播到wcf1和wcf2服務器。所以他們都持有對客戶端的回調引用。當其中一臺wcf服務器關閉時,問題開始。如果wcf1服務器關閉,則所有訂閱都將丟失。所以當它恢復活力時,沒有任何訂閱可用於回調,並且無法通知客戶重新訂閱。

我試着在客戶端收聽故障事件。這不會被觸發,因爲它連接到路由器端點。只有當路由器服務器關閉時,該事件纔會觸發。

有沒有人遇到過類似的問題?難道我做錯了什麼?

回答

0

處理此問題的唯一方法是將回調列表保存在某種可共享資源中,例如數據庫,緩存甚至共享驅動器上的文件。這可以在啓動時由您的服務的每個實例訪問,所以所有的回調都會在發生故障時重新加載。

對不起,這可能不是你想要在這裏。

+0

我假設回調引用不能被序列化並存儲在某個持久性存儲中。我將重新檢查 – Sai

+0

如果那是真的,那麼我想不出任何其他方式。我不認爲MS正確設想人們如何使用WCF雙面打印 - 在我看來,WCF雙面打印不適合用於目的。 –

+0

我剛剛檢查過,當我們序列化和反序列化回調時,它不再是一個有效的對象或持有對客戶端的實際引用。我同意,wcf duplex會產生比解決問題更多的問題。 – Sai