在WCF的不同实例上共享数据状态

本文关键字:共享 数据 状态 实例 WCF | 更新日期: 2023-09-27 18:09:46

我有两台使用WCF服务的服务器(稍后可能会有更多),它们都位于负载均衡器后面。客户机应用程序,在多个IS服务器(也是负载均衡的)中,调用WCF执行一些操作,比如保存。同样的数据,比如客户端信息,可以被多个用户同时打开。然后,Save操作可以同时由多个用户执行,并且调用将转到不同的WCF服务器。

我希望当一个用户调用Save from UI,并且已经有一个Save正在进行中,从另一个UI到相同的客户端数据,然后第二个用户被提醒。因此,所有WCF实例都应该知道在其他实例中执行的操作。

如何在所有WCF服务器实例之间同步数据状态?我不想共享数据,只是一些数据的状态(打开,保存进行中,诸如此类)

请指教,谢谢,

我正在使用c#/。NET4

添加:WCF实际上托管在windows服务中

在WCF的不同实例上共享数据状态

您遇到的问题是资源管理问题之一。

你正在尝试解决一种方法,你可以让你的服务客户端以某种方式都知道彼此在你的服务内部状态中的打开句柄,然后强迫他们编排以处理这个。

从长远来看,把这个责任推给你的客户会让事情变得更加复杂。理想情况下,客户端应该能够以尽可能直接的方式调用您的服务,而不必知道可能正在使用该服务的任何其他客户端。在大多数情况下,如果呼叫不成功,客户端应该重新尝试。

通常情况下,您会使用锁来处理这些情况——客户端可以同时提交更改,除了一个之外,所有客户端都必须根据引发的异常或发送回的特定响应(可能包括更新的ClientInformation对象)进行重试,这取决于您如何处理它。

如果你绝对要实现这个通知的东西,那么你可以看看使用WCF双工绑定,其中你的服务公开一个回调合约,允许客户端注册一个通知处理程序,该处理程序可以用来发送通知到所有客户端在不同的通道上发出请求。然而,这些设置充其量是复杂的,并且不能很好地扩展。

编辑

回答你的评论,你问题的另一半是关于跨负载平衡服务端点共享状态的。

负载均衡wcf就像负载均衡网站一样——如果你需要在它们之间共享状态,你必须配置一些所有服务都可以访问的备份数据存储。

在您的情况下,明显的地方将是数据库。你只需要确保并发/死锁相关的问题在你的服务代码中被捕获和处理(使用像NHibernate这样的东西来持久化数据可以帮助你)。