Websocket 信令器2.2和ARR3.0负载平衡

Websocket 信令器2.2和ARR3.0负载平衡,websocket,signalr,iis-8,signalr.client,arr,Websocket,Signalr,Iis 8,Signalr.client,Arr,我使用的是signalr2.2 web应用程序,托管在IIS-8中。在这里,我尝试使用ARR3.0为我的应用程序实现负载平衡。在我的服务器场中,我连接了两台服务器,并将路由规则设置为“加权循环”。每个服务器都有一个带有HTML页面的javascript客户端。当我访问任何服务器的HTML页面时,请求已按预期路由,但我的HTML页面中出现此错误,signalr无法连接 连接到“ws://mydomain.com/signalr/connect?transport=webSockets&client

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

连接到“ws://mydomain.com/signalr/connect?transport=webSockets&clientProtocol=1.5&connectionToken=x9rAfatyMm3TbqzrYKL1K37Z4tKrUTH7bwNmSItW55Z0ms6pe43YiQGFOmaHMyT%2bpmgz62uktha72vpcjhdqtivsqvqvy15oygv69jjzsuuis7v2l%2fcczt3z&connectionData%5B%7B%22name%22%22%7D%5D&tid=1”的WebSocket连接失败握手:意外响应代码:400

如果我使服务器场中的任何服务器脱机,Signal工作正常,不会抛出任何错误。帮助我找到解决方案。

如果我从.net客户端应用程序与signalr服务器通信,它将抛出以下错误

启动请求期间出错。正在停止连接


我也有这个问题。深入查看,错误是:
连接id的格式不正确
。在谷歌搜索了一下之后,我在某个地方读到,当运行服务器场环境时,服务器需要共享相同的机器密钥,这可以在IIS中配置

为此,请执行以下步骤:

  • 打开连接到服务器场中任何服务器的IIS
  • 在服务器节点中,打开右窗格中的机器密钥选项
  • 在右菜单中,单击生成关键点
  • 取消选中验证密钥和解密密钥的
    为每个应用程序生成唯一密钥
    选项
  • 复制生成的两个键(例如粘贴在记事本中)
  • 确保服务器场中的所有服务器共享相同的密钥(ARR服务器不需要此密钥),您可能需要在这些服务器中重复上述步骤(可能在它们使用共享配置时不需要)
此外,还需要确保每个服务器中的应用程序使用相同的标识。例如,选择您的应用程序节点(或站点节点,如果是这样),在右菜单中选择基本设置,然后选择连接为…。如果选择的选项是Application user,则需要检查应用程序池是如何配置的。如果它使用网络服务(就像我的一样),您仍然会遇到问题,因为每个服务器都使用自己的凭据,但您必须确保它们使用相同的标识


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

除了@Alisson的答案,我还找到了一种设置机器钥匙的简单方法

您可以在Web.config文件中直接执行此设置。 在system.web部分下为machineKey创建一个条目。 条目看起来像


唯一的验证密钥解密密钥可以通过@Alisson的答案中给出的步骤生成


通过使用这种方法,您无需担心服务器在任何时候的更改或在任何其他web场服务器上的部署。您的代码将毫无问题地运行。

您需要在farmHi@janithat000中的所有服务器上设置相同的机器密钥,我需要澄清,在服务器场中,在执行机器密钥更改后,每当我点击url时,一台服务器中发生了onconnected,另一台服务器中发生了hub方法调用。这是路由中的程序吗?还是我遗漏了什么?请帮帮我。注意:我在应用程序nodeThanks Alisson中使用传递身份验证。我会试试这个,让你知道hi@Alisson,它工作得很好,此后我再也没有收到任何套接字错误。谢谢你的信息。但有一件事我需要澄清,在服务器场中,在实现了机器密钥更改之后,每当我点击url时,一台服务器上发生了OnConnectiond,另一台服务器上发生了hub方法调用。这是路由中的程序吗?还是我遗漏了什么?请帮帮我。注意:我正在应用程序中使用直通身份验证。我的评论有什么想法?@Suresh-oh,我忘了,对不起。在默认配置中,IIS将每个请求平均分配给服务器。所以第一个请求转到服务器A,下一个请求转到服务器B,再转到服务器A,依此类推。当您连接到SignalR时,实际上IIS正在接收一个请求,并且连接将被转发到其中一个服务器。当您调用一个hub方法时,它转到另一个服务器是正常的。如果您再次调用它,它应该转到下一个服务器,依此类推。因此,发生在您身上的是预期的行为。每次尝试循环负载平衡时,我都会收到以下脚本警告:“[弃用]主线程上的同步XMLHttpRequest已弃用,因为它会对最终用户的体验产生有害影响。”。如需更多帮助,请选中“您对此有何想法?您是否知道,如果我需要如上文所述,取消选中“为验证密钥和解密密钥的每个应用程序生成唯一密钥”选项?或者,将配置添加到配置文件中就足够了吗?是的,将配置添加到配置文件中就足够了。