SignalR 2.2和ARR3.0负载均衡

问题描述:

我使用的是signalr2.2 web应用程序并托管在IIS-8中。在这里我尝试使用ARR3.0为我的应用程序实现负载平衡。在我的服务器场中,我连接了两台服务器,并将路由规则设置为“加权循环”。每个服务器都有一个带HTML页面的javascript客户端。虽然我访问如预期的要求已经排到任何服务器的HTML页面,但我在我的html页面有这个错误,signalr没有获得连接SignalR 2.2和ARR3.0负载均衡

WebSocket连接到“WS://mydomain.com/signalr /连接运输=的WebSockets & clientProtocol = 1.5 & connectionToken = x9rAfatyMm3TbqzrYKL1K37Z4tKrUTH7bwNmSItW55Z0ms6pe43YiQGFOmaHMyT%2BpmGz62ukt4tha72vPcJhdqLtIvsQvqvY15oYGv69JjzSuuiSL7v2l%2FccZT6tQa3Z & connectionData =%5B%7B%22name%22%3A%22chathub%22%7D%5D & TID = 1' 失败:?期间出错WebSocket握手:意外的响应代码:400

如果我在我的serverfarm中使此服务器的任何人脱机,signalr工作正常,并且不会引发错误。帮助我找到解决方案。

如果我从我的.NET客户端应用程序通信signalr服务器时,它会抛出下面的错误开始请求期间

错误。停止连接。

+0

您需要在服务器场中的所有服务器上设置相同的机器密钥 – janitha000

+0

Hi @ janithat000,我需要澄清的是,在服务器场中实现了机器密钥更改后,每当我点击url时,就会在一个服务器和集线器方法调用发生在另一台服务器上这是路由过程吗?或者我错过了什么?请帮助我。 注意:我正在使用应用程序节点 – Suresh

我也有这个问题。更深入地看,错误是:The connection id is in the incorrect format。在Google上搜索一下之后,我读到了某个地方,当运行一个服务器场环境时,这些服务器需要共享相同的机器密钥,这个机器密钥可以在IIS中配置。

为此,请按照下列步骤操作:

  • 打开IIS连接到任何服务器场中的服务器。
  • 在服务器节点上,打开在右侧窗格中
  • 在右键菜单中计算机密钥选项,单击生成密钥
  • 取消选中两个确认键解密密钥Generate a unique key for each application选项。
  • 复制生成的两个关键词(例如粘贴到记事本)
  • 确保在农场所有服务器都共享这个相同的密钥(ARR的服务器并不需要这个),你可能需要重复上述这些步骤(也许你没有尽快使用共享配置)。

此外,您需要确保您的应用程序在每个服务器使用相同的身份。例如,选择您的应用程序节点(或站点节点,如果是这种情况),在右侧菜单中选择基本设置,然后连接为...。如果选择的选项是应用程序用户,那么您需要检查如何配置应用程序池。如果它使用网络服务(与我的一样),您仍然会遇到问题,因为每个服务器都使用自己的凭据,但您必须确保它们使用相同的身份。

在我的场景中,我必须创建一个用户,以访问服务器场中的每台服务器,并使应用程序使用同一用户。只有这样做后,我的问题才得到解决。

+0

中的身份验证,谢谢Alisson。我会尝试这个,让你知道 – Suresh

+0

嗨@Alisson,它工作正常,我从来没有得到任何插座错误后。感谢这个信息。但有一点我需要澄清的是,在服务器农场中实现了机器密钥更改后,每当我点击url时,就会在一台服务器上发生连接,并在另一台服务器上发生集线器方法调用。这是路由过程吗?或者我错过了什么?请帮助我。 注意:我正在使用应用程序节点 – Suresh

+0

@Suresh中的身份验证,欢迎您。考虑将答案标记为已接受,如果是这样的话。 – Alisson