2013-02-13 20 views
1

我连接到我的服务器,该服务器负载均衡,以便将别名指向2个服务器,并且它为了参数而绕回连接。我可以毫无问题地连接到集线器,我甚至可以将东西发送到服务器,但是当它返回给客户端时,我永远不会调用我的方法。如果我绕过负载平衡器并明确使用服务器名称,它总是可以正常工作。我甚至会跟踪它,然后从Clients.Client(clientId).completeJob(stuff)发回确切的始发服务器的消息,并且在服务器上执行得很好,但如果我继续使用它,它会永远不会完成。SignalR不会在客户端上调用带有DNS别名的结果

哦,它与服务器发送的事件相关联。我错过了什么,或者这只是不支持?

+0

作为更新,它现在通过别名与客户端进行通信,但不是.NET客户端到服务器的通信,但由于某些奇怪的原因仍然需要使用具体的名称。 – dariusriggins 2013-02-13 21:20:00

+0

对此有何更新?很高兴看到一些代码,看看你如何解决这个问题以及随之而来的任何环境配置。 – Chookoos 2013-10-15 04:04:18

回答

0

服务器发送的事件建立一个长时间运行的连接,但与WebSockets不同,它不是双向的。连接只能用于将数据推送到客户端。

当WebSocket传输不可用时,SignalR使用常规XHR从客户端发送数据。这意味着负载均衡器可能会将客户端到服务器的集线器方法调用路由到不同于客户端最初建立服务器发送的事件连接的服务器。

执行Clients.Client(clientId).completeJob(stuff)的服务器可能不拥有允许它将消息推送到指定客户端的连接。 (尽管从服务器上的集线器方法返回值将通过调用该方法的相同连接将数据发送回客户端。)

SignalR可以在负载均衡器后面工作。它只需要更多的设置,所有的SignalR服务器都可以通过Service Bus或Redis等背板相互通信。这允许将消息分派给拥有服务器到客户端连接的服务器。

https://github.com/SignalR/SignalR/wiki/Azure-service-bus详细说明如何在Azure上设置服务总线背板。

+0

关于Redis安装的文档有点过时了,但它非常简单,而且效果很好。谢谢! – dariusriggins 2013-02-14 21:32:24