我遇到了SignalR的问题,至今无法理解为什么。 我已经写了一个长时间处理操作的中心,并注意到它会在FireFox中更新进度,但是Chrome有问题。 所以,我写了简单的测试中心,以检查是怎么回事:SignalR块chrome用户界面?
public class SimpleHub: Hub
{
public void LongProcess()
{
System.Threading.Thread.Sleep(2000);
Clients.Caller.AddProgress("Step 1 of 5 has completed.");
System.Threading.Thread.Sleep(2000);
Clients.Caller.AddProgress("Step 2 of 5 has completed.");
System.Threading.Thread.Sleep(3000);
Clients.Caller.AddProgress("Step 3 of 5 has completed.");
System.Threading.Thread.Sleep(1000);
Clients.Caller.AddProgress("Step 4 of 5 has completed.");
System.Threading.Thread.Sleep(4000);
Clients.Caller.AddProgress("Step 5 of 5 has completed.", true);
}
}
它做什么,它增加了进度每隔几秒钟。它在两个浏览器中都可以像在干净的项目中那样工作 - 每隔几秒钟在浏览器中显示新的进度消息。
但是,当我在真实项目上尝试它时,它可以正常工作,但在Chrome中,它看起来完全阻止UI(甚至不重绘Chrome控制台),只有当LongProcess完成时,它才会添加所有进度消息。
所以问题是,这可能是什么原因 - 可能是一些jQuery设置?任何想法要检查什么? 顺便说一句,我试过longPolling
和serverSendEvents
(这是在Chrome中由signalR自动选择的),两者结果相同。
更新:增加了客户端代码:
var hub = $.connection.SimpleHub;
hub.client.AddProgress = function (progress) {
$("#placeOrderProgress").append('<li><span>' + progress + '</span><i></i></li>');
};
$.connection.hub
.start()
.done(function() {
hub.server.longProcess($('#checkoutForm').toJSON());
});
你的客户代码是什么? –
用客户端代码更新了问题。 – Giedrius
在服务器上放置一个断点,当您通过Chrome启动连接时,确保您的服务器端方法触发。通常发生挂起不能实例化连接。 –