【问题标题】:SignalR: WebSockets Error 400 on Azure Virtual MachineSignalR:Azure 虚拟机上的 WebSockets 错误 400
【发布时间】:2015-12-25 06:21:43
【问题描述】:

我在 Azure VM 上托管 WebSockets (SignalR) 应用程序,远程连接时遇到以下 400(错误请求)错误。

WebSocket connection to 'ws://xxx.cloudapp.net/signalr/connect?transport=webSockets&
clientProtocol=1.5&connectionToken=JMLk3b...&connectionData=%5B%7B%22name%22%3A%22
dashboard%22%7D%5D&tid=10' failed: Error during WebSocket handshake: 
Unexpected response code: 400

在 VM 中本地访问应用时不会发生这种情况。

我怀疑这是these various articles 中突出显示的代理问题。

但是,我似乎找不到任何文章表明是否可以在 Azure VM 上实际托管 WebSockets 应用程序(我知道他们最近启用了 WS on Azure Websites,但似乎 VM 还没有此功能) .

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: azure websocket signalr virtual-machine signalr-hub


    【解决方案1】:

    问题最终是代理服务器(例如 Squid)在各种 ISP 使用客户端,而不是在 Azure 端使用代理服务器。

    【讨论】:

    • 我也有同样的问题。你能解释一下你的解决方案吗?
    • 在您的客户端(浏览器)和服务器(SignalR 主机)之间建立网络连接时,可能会涉及到其他网络设备/服务器(例如代理服务器)。这些中间人促进了客户端和服务器之间的通信。但是,其中一些还不支持 WebSockets 协议。所以最有可能的是,他们认为通过端口 80 的流量是普通的旧 HTTP。然后通过端口 80 的 WS 流量将被拒绝,从而导致 400。问题很可能是您的 ISP 或托管公司的代理服务器。
    • 尝试使用此站点连接并发送消息:websocket.org/echo.html。如果失败,很可能是您的 ISP 的代理服务器不支持 WebSockets。如果它通过,则可能是您主机上的代理服务器问题,或者您的 SignalR 主机配置存在问题。您可以在任一端使用 WireShark 来查看流经网络的流量。这将帮助您了解事情发生在哪里。
    • 非常感谢!我尝试了 websocket.org,我可以连接到 echo websocket。但我仍然收到 400 错误。
    • 等等,所以在日志窗口中你会看到“CONNECTED”,然后是“SENT: Rock it with HTML5 WebSocket”,然后你会得到 400?
    猜你喜欢
    • 2010-09-27
    • 2017-02-22
    • 2016-07-08
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 2018-03-28
    • 2019-01-01
    • 1970-01-01
    相关资源
    最近更新 更多