如何为SSE(服务器发送事件)和SignalR配置IIS 7.5

时间:2012-08-29 12:16:56

标签: iis-7.5 signalr server-sent-events

我已经测试了我的Asp.NET MVC应用程序以运行SignalR,它使用Visual Studio 2012,IIS Express(Microsoft-IIS / 8.0)和Chrome正确处理带有serverSentEvents连接的text/event-stream 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 +上实现?

当我尝试直接访问网址时 '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":{}}

因此我不确定为什么超时会达到请求。

2 个答案:

答案 0 :(得分:7)

事实证明在我的情况下需要没有特定的配置 - SignalR回退到longPolling取决于我的服务器明显落后于代理的事实。

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

向用户dfowler表示正面(更多here

答案 1 :(得分:1)

在将服务器发送到客户端之前压缩生成的动态内容可能会发生什么。 在web.config中添加此内容以修复

   <location path="signalr">
    <system.webServer>
      <urlCompression doDynamicCompression="false"/>
    </system.webServer>
  </location>