1

我有一个基于客户端服务器的 Windows 窗体应用程序,它只需要管理员屏幕。管理员功能需要以这样一种方式实现,即在任何给定时间只有一个管理员可以访问该屏幕。Windows 窗体客户端应用程序使用 .NET Remoting 与服务器对话。并且服务器端分布在多台机器上。

4

2 回答 2

3

这可以通过使用数据库表最容易地完成。通常,数据库已经具有容错性,并且是用于共享锁方案的安全资源。只需有一个锁定表,其中包含有关锁定资源的一些信息,谁拥有它,何时等。

您还可以使用市场上的各种“状态服务器”之一来存储锁定状态。但是,这会引入一个故障点,除非您投资于一种较新的分布式状态技术。

但是,您确实在为进一步的问题做好准备。您需要一个屏幕来允许强制解锁、查看谁拥有锁等。您最好看看为什么真的需要这个锁。是技术需求还是业务需求?您可以更轻松、更干净地实现悲观数据更新方案,从而改善用户体验。

于 2008-12-09T20:31:29.110 回答
0

您需要在服务器上维护一个静态成员,以指示窗口当前是否正在使用中。在设置值时使用lock()函数确保它是线程安全的。然后,您可以在显示管理屏幕之前检查该值。

就服务器端而言,您提到它存在于多台 PC 上。这是一种作为一个虚拟服务器运行的负载平衡拓扑吗?如果是这样,您可能需要将值保存在数据库中。以与 ASP.Net 保持Session State相同的方式来考虑它。我可以存在于服务器上,但如果有服务器场,它可以移动到 SQL Server 以供所有服务器使用。

于 2008-12-09T20:33:35.703 回答