MVC4,WebSocket,Safari context.IsWebSocketRequest为false

时间:2012-05-23 15:44:17

标签: safari websocket asp.net-mvc-4

我使用Windows 8与IIS8和MVC4建立websocketconnection。这适用于Firefox,IE10和Chrome。 Safari仍然不会让我建立websocketconnection。我的Handlercode看起来像这样:

<!-- language: c# -->
public void ProcessRequest(HttpContext context)
{
if (context.IsWebSocketRequest)
{
Client client = new Client();
context.AcceptWebSocketRequest(client.HoldConnection);
}
}

问题是context.IsWebSocketRequest始终为false,同时通过Safari进行连接。我的JavaScript代码很简单this.socket = new WebSocket(window.WebSocketUrl);

1 个答案:

答案 0 :(得分:2)

有两个不兼容的websocket协议版本正在使用中。 Safari使用原始(现已弃用)Hixie变体; Firefox,IE10和Chrome使用较新的Hybi变体

很有可能构建一个说两个版本的websocket服务器,但听起来MVC4只支持Hybi客户端。

Safari将最终迎头赶上。如果您不能等到这一点,您可以考虑使用支持websocket变体的替代服务器,或者重新设计客户端进行轮询(无论是标准还是作为websocket连接失败时的后备)。