我有两台带有WCF服务的服务器(可能会更晚),这两台服务器都在负载均衡器后面。在多个IS服务器(也称为loadbalanced)中的客户端应用程序调用WCF执行某些操作,让我们说保存。 相同的数据,比如客户信息,可以由多个用户同时打开。 然后,可以同时从多个用户执行“保存”操作,并且该呼叫将转到不同的WCF服务器。
我希望当用户从UI调用Save时,并且已经通过相同的客户端数据从另一个UI保存正在进行中,然后第二个用户会收到有关它的警报。 为此,所有WCF实例都应该知道在其他实例中已执行的操作。
如何在所有WCF服务器实例之间同步数据状态呢? 我不想分享数据,只是数据的一些状态(打开,保存正在进行中,等等)
请建议,谢谢,
我正在使用c#/。NET4
补充:WCF实际上是在Windows服务中托管的。
答案 0 :(得分:0)
您遇到的问题是资源管理问题。
您正在尝试解决一种方法,以便您可以以某种方式让服务客户端了解彼此在服务中的内部状态上的打开句柄,然后强制它们进行协调以便处理此问题。
从长远来看,将这一责任推向客户将使事情变得更加复杂。理想情况下,客户应该能够以尽可能简单的方式呼叫您的服务,而无需了解可能正在使用该服务的任何其他客户。如果他们的电话不成功,最多应该要求客户重试。
通常你会通过使用锁来处理这些情况 - 客户端可以同时提交所有更改,除了一个之外的所有人都必须根据发回的一些异常或发回的特定响应(可能包括更新的ClientInformation对象)重试,具体取决于方式你处理它。
如果您必须实现此通知内容,那么您可以查看使用WCF duplex bindings,其中您的服务公开了一个回调合同,允许客户注册可用于发送通知的通知处理程序对所有客户在不同的渠道上提出请求。然而,这些最好是建立起来并且不能特别好地扩展。
修改强>
在回复您的评论时,您的另一半问题是关于在负载均衡服务端点之间共享状态。
负载均衡wcf就像负载均衡网站一样 - 如果需要在它们之间共享状态,则必须配置一些所有服务都可以访问的后备数据存储。
在你的情况下,明显的地方是数据库。您只需确保在服务代码中捕获并处理并发/死锁相关问题(使用类似NHibernate的东西来保存数据可以帮助解决这个问题)。我只是没有看到你在这里遇到真正的问题。