2015-09-01 116 views
1

我在Azure虚拟机上托管WebSockets(SignalR)应用程序,并且在远程连接时遇到以下400(错误请求)错误。SignalR:Azure虚拟机上的WebSockets错误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中本地访问应用程序时不会发生这种情况。

我怀疑这是代理问题,如thesevariousarticles中突出显示。然而,我似乎无法找到任何文章指出是否可以在Azure虚拟机上真正托管WebSockets应用程序(我知道他们最近启用了WS on Azure Websites,但似乎虚拟机还没有此功能)。

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

回答

0

问题最终成为代理服务器(如Squid)在各个ISP上使用客户端,而不是Azure端的代理服务器。

+0

我有同样的问题。你能解释一下你的解决方案吗? – CPA

+0

在您的客户端(浏览器)和服务器(SignalR主机)之间建立网络连接时,可能会有其他网络设备/服务器(如代理服务器)参与到此过程中。这些中间人促进了客户端和服务器之间的通信。但是,其中一些不支持WebSockets协议。所以很可能,他们认为端口80上的流量是简单的旧HTTP。来自端口80的WS流量将被拒绝,导致400.这个问题很可能是您的ISP或托管公司的代理服务器。 –

+0

尝试连接并使用本网站发送消息:http://www.websocket.org/echo.html。如果失败,可能是您的ISP的代理服务器不支持WebSocket。如果通过,它可能是主机上的代理服务器问题,或者您的SignalR主机配置存在问题。您可以在任一端使用WireShark查看流经线路的流量。这将帮助您查看炸弹的位置。 –