Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有负载平衡的WCF回调地址字典_Wcf_Dictionary_Callback_Load Balancing - Fatal编程技术网

具有负载平衡的WCF回调地址字典

具有负载平衡的WCF回调地址字典,wcf,dictionary,callback,load-balancing,Wcf,Dictionary,Callback,Load Balancing,当前环境 我们使用的是使用WCF回调的发布者/订阅者模型。我们将WCF服务托管在单个Web服务器上的IIS中。任何客户端都可以通过调用服务方法进行订阅/取消订阅,我们使用字典中的客户端ID分别保存/删除回调地址,即 PrivateShared _currentSubscribers作为新字典(属于UShort,ICallbackService)() Dictionary是静态成员,在web应用程序中使用(内存中不是持久的) 新环境 我们正在将我们的网站转移到新的服务器上。我们将有两台服务器托管该

当前环境 我们使用的是使用WCF回调的发布者/订阅者模型。我们将WCF服务托管在单个Web服务器上的IIS中。任何客户端都可以通过调用服务方法进行订阅/取消订阅,我们使用字典中的客户端ID分别保存/删除回调地址,即

PrivateShared _currentSubscribers作为新字典(属于UShort,ICallbackService)()

Dictionary是静态成员,在web应用程序中使用(内存中不是持久的)

新环境 我们正在将我们的网站转移到新的服务器上。我们将有两台服务器托管该服务,其间有负载平衡器

现在我们需要弄清楚如何维护两台服务器上都可用的订户列表。当然,在这种情况下,我们不能使用相同的内存字典。 我们正在搜索任何可以在服务器之间共享字典的方法

我们已经尝试在db中保存,但它不可序列化,也不能在其他服务器上使用

我们花了一些时间进行搜索,但没有找到任何解决方案,我们可以在服务器之间共享回调地址

有人能指导我们如何做到这一点吗?或者我们可以使用的任何其他选项


我真的很感谢你的帮助。等待你的善意回应

您不能在服务器之间共享该回调字典。每个服务器都必须有自己的字典来维护自己的客户端,因此您必须使用具有会话关联性的负载平衡算法(粘性会话)。此算法将所有请求从单个客户端转发到同一服务器

您不能在服务器之间共享该回调字典。每个服务器都必须有自己的字典来维护自己的客户端,因此您必须使用具有会话关联性的负载平衡算法(粘性会话)。此算法将所有请求从单个客户端转发到同一服务器

解决方案的关键可能在客户端

看,不管怎样,你的客户应该知道你的连接随时都可能被切断。因此,如果它能够处理这个问题,并且能够自动从中恢复,那么它连接到一个由N台服务器或1台服务器组成的服务器场就没有问题,因为它根本不知道这两者之间的区别

因此,您不需要将客户端连接到两台(即“所有”)服务器,它只需要维护到其中一台服务器的连接。这当然意味着,考虑到人们使用负载平衡来平衡负载,而不是简单地提供冗余,您很有可能让一台机器为超过一半的活动连接提供服务


但你的客户也不知道。因此,您的服务器可以每隔一段时间故意切断连接线,如果没有别的事情,那就是让客户端从一台服务器反弹(可能)到另一台服务器,不断分散负载。无论如何,您的客户机应该能够适应断开连接的情况,同样,它也不会知道区别。

解决方案的关键可能在客户机端

看,不管怎样,你的客户应该知道你的连接随时都可能被切断。因此,如果它能够处理这个问题,并且能够自动从中恢复,那么它连接到一个由N台服务器或1台服务器组成的服务器场就没有问题,因为它根本不知道这两者之间的区别

因此,您不需要将客户端连接到两台(即“所有”)服务器,它只需要维护到其中一台服务器的连接。这当然意味着,考虑到人们使用负载平衡来平衡负载,而不是简单地提供冗余,您很有可能让一台机器为超过一半的活动连接提供服务

但你的客户也不知道。因此,您的服务器可以每隔一段时间故意切断连接线,如果没有别的事情,那就是让客户端从一台服务器反弹(可能)到另一台服务器,不断分散负载。无论如何,您的客户应该能够适应断开连接的情况,再说一次,它不会知道有什么区别