我在aspx-Page上使用signalr 0.4,
var hub = $.connection.FooHub;
hub.disconnected(function () {
log("Server has disconnected");
});
hub.ShowInfo = function (Info) { .... }
$("#Button1").click(function () {
hub.FooFunction('foo');
});
$.connection.hub.start();
Hub定义为:
public class FooHub : Hub, IDisconnect
{
~FooHub()
{
log.Debug("FooHub Destroy");
}
public FooHub()
{
log.Debug("FooHub Startup");
}
public bool FooFunction(string stuff)
{
log.Debug("Hub FooFunction");
Clients.ShowInfo(someInfo);
return true;
}
public Task Disconnect()
{
// Query the database to find the user by it's client id etc. etc.
MyController.Disconnect(Context.ConnectionId);
log.Debug("Hub Disconnnect " + Context.ConnectionId);
return null;
}
......
}
当我打开页面并立即点击Button1时 它调用Hub,后者又调用页面上的ShowInfo函数 使用Firebug,我可以看到信号器正在使用长轮询进行通信。 所以一切都按预期工作。
但是当我等了几分钟时 我明白了
然而在页面上没有新的连接
Firebug显示旧的仍在执行中
然后当我点击按钮 -
这是SignalR中的错误还是我必须做其他事情才能获得ShowInfo调用?
更新(可能的答案):
它使用了Forever-Frame而不是长轮询。
此外,问题似乎主要发生在使用移动互联网(usb-stick)和Firefox时。
将传输更改为long-Polling似乎可以解决此问题。
答案 0 :(得分:1)
你提到切换到长轮询而不是使用永久帧,但没有说明如何做到这一点。您可以指定在启动连接时尝试的传输。
connection.start({ transport: ['longPolling','webSockets'] });
有关更多选项,请参阅https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client。
答案 1 :(得分:0)
你看过这个https://github.com/SignalR/SignalR/wiki/Configuring-SignalR 试试看吧。根据你的代码对我来说,每件事似乎都没问题。你也可以在Chrome中测试它,看看发生了什么。