2009-07-17 64 views
1

我們正在開發一個Windows Forms應用程序,該應用程序將安裝在約1,000名員工個人電腦上。用戶可以同時運行應用程序的多個實例。客戶端都在一個內部網上。Windows Forms&WCF - 客戶端應用程序通信

應用程序中的更改可能會導致數據庫記錄更改,而這些更改必須傳遞給其他客戶端,以便更新其UI。

我們的團隊已經談到了兩種不同的方法:

1.多播數據包

源客戶端修改記錄,然後與東西已經改變有效載荷發出一個組播數據包。其他客戶端接收並獲取指定的數據。我們需要說明數據包未收到時的情況,並回退到主動檢索數據。

我現在的問題是客戶如何知道它沒有收到數據包? (不知道你不知道的是什麼)這會將我們帶到某種事件日誌中,並在數據庫中添加時間戳,並且UI控件會跟蹤它們上次更新的時間。他們開始關注,檢查他們的時間戳,並根據需要進行更新。

其他人表示,UI元素在每次焦點時都會重新加載(思考Outlook中的模式,將控件帶到CAB的堆棧工作區前端)。多點傳送是爲了更新當前上下文已經改變的客戶端。如果他們錯過了,他們會使用陳舊的數據,直到他們改變模式並回來。

2. WCF和回調

客戶註冊在TCP綁定回調WCF合同。與此有關的主要技術問題是服務器維護許多開放式套接字。我們已經閱讀了它在傳統意義上是如何不公開的,它最多可以休眠90秒,然後在那個時候重新建立。我們還了解了Windows 2003 Server計算機可以處理的最大打開連接數以及如何在註冊表中修改這些連接。

如果我們有1000個打開的套接字連接到服務器,這是否會崩潰?

如果有人遇到過這種情況,並嘗試或評估過WCF方法,我們很樂意聽到它。

回答

1

我還沒有實現這樣的情況。不過,我認爲其中一個雙工綁定不一定會有很高的開銷。

這一切都取決於服務器需要發送回客戶端的信息量。我瞭解你說這些信息將用於他們更新他們的用戶界面。然而,他們似乎可能並不都需要同一時間同樣數量的信息。例如,如果有關西部地區的信息發生了變化,所有1000個客戶可能想知道有變化,他們可能都希望更新有關西部地區的彙總級別信息,但可能只有其中的1/4需要查看更改的詳細信息。

如果是這種情況,那麼我建議回調只提供有關什麼已更改的信息,主要是在彙總級別。讓那些對變更細節感興趣的客戶要求詳細信息。您甚至可以提供最高一級或兩級層次結構的所有詳細信息,其餘的僅包括「時間」更改的信息。這樣,根據特定客戶的等級級別,客戶可以詢問或不詢問。

如有必要,您可以一起批量更新。如果客戶端只需要每秒更新一次,那麼您可以累積最後一秒的更改並一次全部發送。

您可能還想爲某些任務使用某些對等綁定。也許在您的業務特定領域的客戶想知道對方正在處理什麼 - 這類事情。

+0

您觸及了我們討論過並正在考慮的許多事情,例如批處理更新。您強調我沒有完全描述環境,但它在地理位置相鄰的建築物中的同一物理LAN上大約有1,000個用戶。數據沒有跨越多個垂直區域,所有的用戶都在查看相同的數據,只有一些用戶可以編輯項目,大多數用戶不能,例外是個人組織模塊。我認爲你的答案有幫助,所以+1,但我會看看是否有人試過這個,並知道任何性能/資源問題。謝謝。 – blu 2009-07-17 18:38:07

+0

太好了。事實上,我很想知道這個結果;至少可以做任何概念驗證。博客(提示,提示)對你來說是件好事。 – 2009-07-17 18:50:02

相關問題