2011-08-09 14 views
0

也許我正在以錯誤的方式解決這個問題,但這是我目前的「設置」。管理Silverlight前端的WCF雙工回調連接

我有一個silverlight客戶端,它使用Caliburn.Micro和一個帶有「LoadCatalog」類的MEF容器,以MVVM方式保持一切鬆散耦合。

我有一個「common」dll,其中保存了所有的接口。

我所有的視圖和視圖模型都是單獨的項目,只有對常見DLL的引用。

視圖模型使用WCF(普通)與後端進行通信。前端本身具有到後端的雙工連接。

現在這裏是想到的問題。每當後端認爲是時候在前端出現一個新的屏幕時,它會使用回調通道告訴前端加載下一個屏幕。

這似乎是一個很好的模式使用?或者我應該離開管理什麼屏幕加載到前端?我認爲在後端有這個很好,但也許這是我不知道的某種反模式,因此是一個問題。

現在爲了參數的緣故,可以說我想保留在後端。

什麼是管理後端回調通道集合的最佳方法?如果我在所有常規WCF端點以及雙工通道上啓用SessionMode.Required,它是否會在多個端點(常規+雙工)上一起保持狀態?或者只會在一個端點內保持狀態? 我的猜測(從目前爲止我已經能夠做的測試中)是我需要添加一些邏輯,例如一旦回調連接完成,就用guid提供前端。然後在常規端點連接中使用該guid,以便後端知道它是哪個「客戶端」。

如果我收集了我收到的回叫通道,我是否能夠「可以」可靠地收集所有通道並檢測當前狀態?我現在可以攔截回調通道(只有1個實例atm,沒有集合或任何東西,所以單個用戶),並使用它來告訴前端要做什麼。但有時,當客戶端停止(換句話說,當發生錯誤)並且我再次啓動客戶端時,似乎以前的(故障的)連接仍然「重用」或某種東西,但沒有運氣,因此通信流程停止連接雙工端點後。

這是否有意義?

希望有人在這件事上有一些經驗可以爲我揭示一些事情。我不是總的新手,但對於多重連接和保持分離,我可能需要一些指向正確方向的指針。

謝謝!

Huron。

+0

我設法啓動並運行。這就是我所做的: – Huron

+0

我設法使這個啓動和運行。當我從前端創建雙端連接到後端時,我返回一個唯一的Guid。從現在開始,我使用這個公會來處理與後端進行的所有通信。這使得後端「識別」客戶端。 在後端我有一個連接列表(抓取回調通道並將其與Guid一起存儲)。 只需要確保在我迭代它時或者當我添加/刪除項目時鎖定列表對象,因爲它將通過設計從多個線程中使用。 從後端獲取控制權的模式似乎迄今爲止效果很好。 – Huron

回答

0

我設法啓動並運行。

當我創建從前端到後端的雙工連接時,我返回一個唯一的Guid。從現在開始,我使用這個GUID來處理與後端進行的所有通信。

這使得後端「識別」客戶端。

在後臺我有一個連接列表(抓取回調通道並將其與Guid一起存儲)。

只需要確保鎖定列表對象,每當我迭代或當我添加/刪除項目,因爲它將從多個線程通過設計使用。

從後端獲取控制權的模式似乎迄今爲止效果很好。