2008-12-09 35 views
1

我有一個基於客戶端服務器的Windows窗體應用程序,只需要一個管理員屏幕。管理員功能需要以任何時候只有一個管理員可以訪問該屏幕的方式實現。 Windows窗體客戶端應用程序使用.NET Remoting與服務器對話。而服務器端分佈在多臺機器上。如何在分佈式.Net應用程序中一次只允許一個用戶訪問資源(屏幕)?

+0

如果您的堆棧中有SqlServer,您可以通過[此NuGet包](https://github.com/madelson/DistributedLock)利用其內置的分佈式鎖定功能。 – ChaseMedallion 2016-03-15 11:36:50

回答

3

這可以通過使用數據庫表格來完成。通常,數據庫已具有容錯能力,並且是用於共享鎖方案的安全資源。只需要一個鎖表,其中包含一些關於鎖定資源的信息,誰擁有它,何時等。

您還可以使用市場上各種「狀態服務器」之一來存儲鎖定狀態。不過,這引入了一個失敗點,除非你投資於一種新的分佈式狀態技術。

但是,你真的爲自己的進一步問題設置自己。你需要一個屏幕來允許強制解鎖,查看誰擁有鎖,等等。你最好看看爲什麼這個鎖真的需要。這是技術還是業務需求?您可以更輕鬆,更乾淨地實施可改善用戶體驗的悲觀數據更新方案。

0

您需要在服務器上維護一個靜態成員,指示該窗口當前是否正在使用。在設置值時,通過使用鎖()函數確保它是線程安全的。然後您可以在顯示管理員屏幕之前檢查該值。

就服務器端而言,您提到它存在於多臺PC上。這是一種負載均衡的拓撲圖,它作爲一個虛擬服務器運行嗎?如果是這樣,您可能需要將值保存在數據庫中。以ASP.Net持續存在的相同方式來思考它會話狀態。我可以在服務器上存在,但是如果有服務器羣,它可以移動到SQL Server以供所有服務器使用。

+0

由於服務器拓撲結構,第一段不相關。第二段是相關的。 – TheSoftwareJedi 2008-12-09 20:36:30

相關問題