SignalR连接挂起,30秒后调用客户端

时间:2012-10-15 00:44:55

标签: iis signalr httpurlconnection

我在MVC4网站上使用NuGet的最新SignalR。使用sample hub code(或任何代码),我遇到了一些奇怪的连接问题。一切正常,SignalR进行协商调用并记录“EventSource Connected”并返回connectionid。问题在使用任何传输进行signalR/connect请求时开始。它返回带有正确标题的200响应,但连接挂起。如果被调用的hub方法在CallerClients上执行方法,则在下一个请求之前或之后10-30秒之后,它不会在浏览器中执行如果你坐的话等一下这就像是卡在管道中的东西,被下一个请求或一些清理机制刷新

我在一个拥有自己的应用程序池的新网站上为此做了一个干净的项目。该问题仅在一台计算机上发生,并且仅在IIS7.5下发生。在IIS Express或Cassini下的同一台机器上运行的同一项目工作正常。大约一个月前我上次工作时,这个项目运行良好。我尝试过不同的浏览器和不同的jQuery版本。我已经尝试重启整个机器并在fiddler / debugger中花了几个小时无济于事。

这是测试运行的服务器端代码:

public class Chub : Hub {
    public void CallMeBack() {
        Caller.callme();
    }
}

整天吹嘘这个,希望有人可以帮忙!

1 个答案:

答案 0 :(得分:5)

压缩对于SignalR使用的流式响应(如EventSource,ForeverFrame等)效果不佳,因此关闭压缩是目前唯一的解决方案。

也许只能为〜/ signalr路径关闭压缩,我稍后会尝试并用结果更新这个答案。

更新:经过全面分析后,我发现只有当IIS中的应用程序池设置为“经典模式”且启用了动态压缩时才会出现此问题。请参阅我对this SignalR问题的评论。如果使用“集成模式”应用程序池,则不会受到影响,SignalR将按预期工作(即使启用了压缩)。

如果您遇到经典模式+动态压缩,请将以下内容添加到您的web.config中,以便仅针对/ signalr路径关闭压缩:

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