websocket - SignalR - 在 Chrome/Firefox 中始终降级为服务器发送事件

标签 websocket timeout signalr downgrade

我有一个 API 应用程序和一个 Web 应用程序(为了简单起见,在同一服务器上 - 我稍后会做 CORS 的事情)。

  • 带有 IIS 8.5 的 Windows Server 2012
  • 通过“程序和功能”安装的 Websocket
  • 防火墙已关闭

API 使用 owin + signalr 并进行了正确的初始化(对其进行修剪以查找错误):

public void Configuration(IAppBuilder app)
{
    GlobalHost.Configuration.TransportConnectTimeout = TimeSpan.FromSeconds(5);
    app.MapSignalR();
    app.UseWebApi(Startup.CreateConfiguration());
}

private static HttpConfiguration CreateConfiguration()
{
    HttpConfiguration configuration = new HttpConfiguration();
    configuration.MapHttpAttributeRoutes();
    return configuration;
}

除了与实际 Websocket 的连接之外,一切似乎都运行良好。每次客户端尝试建立连接时,都会超时并故障转移到 SSE(或 IE 中的永久帧/长轮询)。我将超时时间增加到 25 秒,但出现了相同的症状。

在客户端上,打开日志记录后我总是收到此错误:

SignalR: Connecting to websocket endpoint 'ws://[myurl]'.
SignalR: Websocket opened.
SignalR: **webSockets timed out when trying to connect.**
SignalR: Closing the Websocket.
SignalR: Attempting to connect to SSE endpoint 'http://[myurl]'.
SignalR: EventSource connected.
SignalR: serverSentEvents transport selected. Initiating start request.
SignalR: The start request succeeded. Transitioning to the connected state.

我尝试按照 signalR 团队提供的指南进行操作,但我看不到我缺少的内容。

感谢您的帮助!

更新: 我下载了一个示例并在服务器上按原样运行。 同样的情况,所以这可能是我一路上错过的服务器配置设置。我仍然没有找到我错过的东西。

最佳答案

您需要在服务器管理器中为网站启用 WebSocket。

http://www.iis.net/learn/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support

关于websocket - SignalR - 在 Chrome/Firefox 中始终降级为服务器发送事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25533019/

相关文章:

node.js - WS 握手时不传递 Cookie header

javascript - JavaScript 中的递归和 setTimeout

ios - 在 xmpp 中自动调用 xmppStreamDidDisconnect

c# - 通过信号器从部分 View 发送消息

firebug - 如何使用Firebug或其他查看WS/WSS Websocket请求内容?

javascript - 无法连接到java websocket服务器

python - 与 Flask-socketio 进行私有(private)聊天

Java/Android - 如何使用处理程序设置超时外部服务调用

javascript - 调用 MapSignalR 导致协议(protocol)错误

c# - Signalr 不发送给特定用户