我们正在广泛使用Watin进行验收测试,现在我们开始在将SignalR引入网页时遇到问题。我们正在为“Button.Click”和“WebBrowser.GoTo”之类的东西获得超时,这些功能之前完美无缺。我们从Watin获得了“Internet Explorer忙碌时超时”的例外情况,我猜这是因为SignalR正在从客户端进行轮询(当WebSockets到达时,这可能会更好)。有谁知道这个的解决方法?
答案 0 :(得分:4)
我不是SignalR的专家,但我为一家公司工作,该公司生产名为WebSync的商业实施。
我最初的怀疑是你可能正在达到IE的并发请求限制。
首先,相同的测试在Firefox中运行良好,但不是IE吗? (IE通常比具有并发请求的其他浏览器更差)。还在测试哪个版本的IE?对于不同代的浏览器,并发请求限制是不同的。看一下这个article documenting the concurrent request limits for IE。在IE中,此限制甚至可以影响在不同窗口中打开的同一页面的多个副本。但这取决于IE的版本,微软一直在稳步提升。
在某些情况下,IE将在每个域只有2个并发请求的情况下运行!可能值得在浏览器中打开开发人员工具并监视正在进行的活动HttpRequests。您将看到SignalR的长轮询请求,但看看它们是否是可能阻塞第二个可用请求槽的任何其他频繁的AJAX活动。 (也许与SignalR完全无关的其他东西也会产生AJAX请求?或者像一个膨胀的CSS或JS文件那样是一个缓慢的加载资源?)
对于WebSync,我们通过将websync移动到像“stream.mydomain.com”这样的子域来解决此问题。现在您的页面资源仍在“www.mydomain.com”上,因此即使在最糟糕的情况下,IE也可能有2个“www”并发请求。和2个“流”的并发请求。如果您的网站非常庞大,我们甚至可以通过使用“a.stream.mydomain.com”,“b.stream.mydomain.com”,....“z.stream.mydomain.com”来进一步划分子域名。如果最终用户可能在多个浏览器窗口中打开页面(每个窗口指向同一个域),这可以进一步缓解问题。
如果您无法移动长轮询连接,有些人会将图片,样式表和javascript等其他内容移动到“static.mydomain.com”等单独的域中,以便这些请求转到其他位置。