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

ken*_*ada 3 iis httpurlconnection signalr

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

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

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

public class Chub : Hub {
    public void CallMeBack() {
        Caller.callme();
    }
}
Run Code Online (Sandbox Code Playgroud)

在这一天吹了一整天,希望有人可以帮忙!

Ale*_*ger 5

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

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

更新:经过全面分析后,我发现只有当IIS中的应用程序池设置为"经典模式"并且启用了动态压缩时才会出现此问题.见我在评论这个 SignalR问题.如果使用"集成模式"应用程序池,则不会影响SignalR并且SignalR按预期工作(即使启用了压缩).

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

<location path="signalr">
  <system.webServer>
    <urlCompression doDynamicCompression="false"/>
  </system.webServer>
</location>
Run Code Online (Sandbox Code Playgroud)