我有一个基于客户端服务器的Windows窗体应用程序,只需要一个管理员屏幕。管理员功能需要以这样的方式实现,即在任何给定时间只有一个管理员可以访问该屏幕。 Windows使用.NET Remoting形成客户端应用程序与服务器的对话。服务器端分布在多台机器上。
答案 0 :(得分:3)
这可以通过使用数据库表最容易地完成。通常,DB已经是容错的,并且是用于共享锁方案的安全资源。只需要一个锁表,其中包含有关锁定资源的一些信息,谁拥有它,何时等等。
您还可以使用市场上的各种“状态服务器”之一来存储锁定状态。这会引入一个失败点,除非你投资了一种较新的分布式状态技术。
但是,你真的为自己的问题做好了准备。你需要一个屏幕来强制解锁,查看谁有锁等等。你最好看看为什么真的需要这个锁。这是技术还是业务要求?您可以更轻松,更干净地实施悲观数据更新方案,从而改善用户体验。
答案 1 :(得分:0)
您需要在服务器上维护一个静态成员,指示该窗口当前是否正在使用中。设置值时,使用 lock()功能确保它是线程安全的。然后,您可以在显示管理员屏幕之前检查该值。
就服务器端而言,您提到它存在于多台PC上。这是一种负载均衡的topolgy,它作为一个虚拟服务器运行吗?如果是这样,您可能需要将值保留在数据库中。可以想象它与ASP.Net持续会话状态的方式相同。我可以存在于服务器上,但如果有服务器场,则可以将其移动到SQL Server以供所有服务器使用。