SignalR 2.2和ARR3.0负载均衡

Sur*_*esh 3 websocket signalr iis-8 signalr.client arr

我正在使用signalr2.2 Web应用程序并托管在IIS-8中.在这里,我尝试使用ARR3.0为我的应用程序实现负载平衡.在我的服务器场中,我连接了两台服务器,并将路由规则设置为"加权循环".每个服务器都有一个带HTML页面的javascript客户端.当我访问任何服务器的HTML页面时,请求已按预期路由,但我在我的html页面中出现此错误并且signalr未连接

WebSocket连接到 'WS://mydomain.com/signalr/connect运输=&的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客户端应用程序通信信号服务器,它将抛出以下错误

启动请求期间出错.停止连接.

Ali*_*son 6

我也有这个问题.看得更深,错误是:The connection id is in the incorrect format.谷歌搜索后,我读到某处,当运行一个服务器场环境时,服务器需要共享相同的机器密钥,可以在IIS中配置.

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

  • 打开连接到服务器场中任何服务器的IIS.
  • 在服务器节点中,打开右窗格中的" 计算机密钥"选项
  • 在右侧菜单中,单击" 生成密钥"
  • 取消选中" 验证密钥"和" 解密密钥 " Generate a unique key for each application选项.
  • 复制生成的两个键(例如粘贴在记事本中)
  • 确保服务器场中的所有服务器共享相同的密钥(ARR服务器不需要此密钥),您可能需要在其中重复上述步骤(可能不会在使用共享配置时立即执行).

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

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