3

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

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

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

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

吹了一整天,希望有人能帮忙!

4

1 回答 1

4

压缩不能很好地处理 SignalR 使用的 EventSource、ForeverFrame 等流响应,因此关闭压缩是目前唯一的解决方案。

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

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

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

<location path="signalr">
  <system.webServer>
    <urlCompression doDynamicCompression="false"/>
  </system.webServer>
</location>
于 2012-10-17T17:40:16.220 回答