我使用signalr 0.4一個aspx頁上,Signalr停止了幾分鐘後做回調
var hub = $.connection.FooHub;
hub.disconnected(function() {
log("Server has disconnected");
});
hub.ShowInfo = function (Info) { .... }
$("#Button1").click(function() {
hub.FooFunction('foo');
});
$.connection.hub.start();
集線器的定義爲:
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;
}
......
}
當我打開網頁,並立即點擊按鈕1
它調用Hub,然後調用頁面上的ShowInfo函數。
隨着Firebug我可以看到,信號使用長輪詢爲通信。因此,一切都按預期工作。
但是,當我再等幾分鐘
我看到
- FooHub被破壞
- 斷開是所謂的樞紐,
但頁面上沒有新的連接
Firebug顯示仍在執行的舊的
當我然後點擊按鈕 -
- FooFunction叫(我看到在螢火一個新的連接)
- FooHub創建
- FooFunction在中心執行(沒有在日誌線)
- ,但不執行ShowInfo
這是SignalR中的一個錯誤,還是我必須做別的事情才能獲得ShowInfo調用?
更新(可能的答案):
將其使用永遠幀,而不是長輪詢。
此外,問題似乎主要發生在使用移動互聯網(usb-stick)和Firefox時。
將交通工具更改爲長輪詢似乎解決了這個問題。