9

我已经测试了我的 Asp.NET MVC 应用程序以运行 SignalR,它text/event-stream使用 Visual Studio 2012、IIS Express (Microsoft-IIS/8.0) 和 Chrome 正确处理带有 serverSentEvents 连接的 MIME。

现在我正在部署到生产环境(IIS 7.5、.NET Framework 4.5、Windows Server 2008R2),我注意到 SignalR 总是回退到 LongPolling 传输,因为signalr/connect?transport=serverSentEvents etc超时。

有没有办法配置 Microsoft-IIS/7.5 以使 ServerSentEvents 工作?还是仅在 8.0+ 上才有可能?

当我尝试直接访问 url 'http://my.webapp.com/MyHub/signalr/connect?transport=serverSentEvents&connectionId=624849a4-45c6-458b-b6d0-f7cb023ab226&connectionData=%5B%7B%22name%22%3A%22myHub%22%7D%5D&tid=2'时,我得到一个文件,其中包含看起来像 SSE 数据包的内容:

data: initialized

id: 14476
data: {"MessageId":"14476","Messages":[],"Disconnect":false,"TimedOut":false,"TransportData":{}}

所以我不确定为什么超时会达到请求。

4

2 回答 2

7

事实证明,在我的情况下不需要特定的配置——SignalR 回退到 longPolling 取决于我的服务器显然在代理之后的事实。

为了测试这一点,我建议尝试使用 localhost 作为网址连接到服务器上的集线器服务器 - 在我的情况下,传输正确设置为 serverSentEvents(使用 Chrome 时)或 foreverFrame(使用 IE 时)

归功于用户 dfowler 的提醒(更多在这里

于 2012-08-30T03:56:09.207 回答
3

服务器在将生成的动态内容发送到客户端之前对其进行压缩可能会发生什么情况。在你的 web.config 中添加这个来修复

   <location path="signalr">
    <system.webServer>
      <urlCompression doDynamicCompression="false"/>
    </system.webServer>
  </location>
于 2015-08-16T09:35:43.663 回答