我正在使用 signalr2.2 Web 应用程序并托管在 IIS-8 中。这里我尝试使用ARR3.0为我的应用程序实现负载均衡。在我的服务器场中,我连接了两台服务器并将路由规则设置为“加权循环”。每个服务器都有一个带有 HTML 页面的 javascript 客户端。当我访问任何服务器的 HTML 页面时,请求已按预期路由,但我的 html 页面中出现此错误,并且信号器未连接
WebSocket 连接到 'ws://mydomain.com/signalr/connect?transport=webSockets&clientProtocol=1.5&connectionToken=x9rAfatyMm3TbqzrYKL1K37Z4tKrUTH7bwNmSItW55Z0ms6pe43YiQGFOmaHMyT%2BpmGz62ukt4tha72vPcJhdqLtIvsQvq vY15oYGv69JjzSuuiSL7v2l%2FccZT6tQa3Z&connectionData=%5B%7B%22name%22%3A%22chathub%22%7D%5D&tid=1'失败:WebSocket 握手期间出错:意外的响应代码:400
如果我使服务器场中该服务器的任何一个离线,信号器工作正常并且不会抛出任何错误。帮助我找到解决方案。
如果我从 .net 客户端应用程序与信号服务器进行通信,它将引发以下错误
启动请求期间出错。停止连接。
我也有这个问题。深入观察,错误是:The connection id is in the incorrect format
。经过一番谷歌搜索后,我在某处读到,运行农场环境时,服务器需要共享相同的计算机密钥,可以在 IIS 中配置该密钥。
为此,请按照下列步骤操作:
- 打开连接到场中任何服务器的 IIS。
- 在服务器节点中,打开机器钥匙右侧窗格中的选项
- 在右侧菜单中,单击生成密钥
- 取消选中
Generate a unique key for each application
两者的选项验证密钥 and 解密密钥.
- 复制生成的两个密钥(例如粘贴到记事本中)
- 确保场中的所有服务器共享相同的密钥(ARR 服务器不需要这个),您可能需要在它们中重复上述步骤(也许一旦它们使用共享配置您就不需要)。
此外,您需要确保每个服务器中的应用程序使用相同的身份。例如,选择您的应用程序节点(或站点节点,如果是这种情况),在右侧菜单中选择基本设置, then 连接为...。如果选择的选项是应用用户,那么您需要检查您的应用程序池是如何配置的。如果它使用网络服务(就像我的一样),您仍然会遇到问题,因为每个服务器都使用自己的凭据,但您必须确保它们使用相同的身份。
在我的场景中,我必须创建一个有权访问场中每台服务器的用户,并让应用程序使用同一用户。只有这样做之后我的问题才得到解决。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)