每當我的應用程序被重置時,signalR會斷開連接但不會重新連接。SignalR斷開連接並且不會重新連接
我有一個長時間運行的服務器任務,在每個任務完成時向客戶端發送更新。
上述代碼時停止應用程序被複位發送更新(ⅰ可以模擬通過觸摸的web.config這個問題)。
我想重新連接到客戶端的方式。目前用戶必須重新加載頁面以便再次獲取更新。
這裏是我的樞紐定義
public class ForceHub : Hub
{
public void MessageSent(string text)
{
GetContext().Clients.All.sent(text);
}
public void UpdateStatus(string msg)
{
GetContext().Clients.All.status(msg);
}
IHubContext GetContext()
{
return GlobalHost.ConnectionManager.GetHubContext<ForceHub>();
}
public override Task OnConnected()
{
try {
IoC.Resolve<ILogger>().Info("SignalR Connected -----------");
}catch (Exception){}
return base.OnConnected();
}
public override Task OnDisconnected()
{
try {
IoC.Resolve<ILogger>().Info("SignalR Disconnected -----------");
}
catch (Exception) { }
return base.OnDisconnected();
}
public override Task OnReconnected()
{
try {
IoC.Resolve<ILogger>().Info("SignalR Re-Connected -----------");
}
catch (Exception) { }
return base.OnReconnected();
}
}
我可以看到連接和重新接活動啓動後觸發,但是觸摸web.config文件之後,我看不到任何這些事件觸發。
我試圖在客戶端上趕上這一點,但這一事件不會tirggered:
$.connection.hub.disconnected(function() {
console.error('signalR disconnected, retrying connection');
logError('Signal lost.');
setTimeout(function() { connection.start(); }, 1000);
});
更新
我也鉤入狀態改變事件,該事件被觸發,但再下面的連接嘗試不起作用。
$.connection.hub.stateChanged(function (state) {
console.debug('signalR state changed', state);
if (state.newState == 1) {
console.debug('restarting');
setTimeout(function() { $.connection.hub.start(); }, 1000);
}
});
此事件被觸發兩次:newState是2,然後1
它看起來像一個有趣的案例,我想攝製它,但我不能。我沒有嘗試長時間運行的任務,但有一個簡單的附加頁面,其代碼在用GET命中時向所有客戶端發送消息。這模擬了一個「帶外」工作,即使在應用程序重置後,它也能正常工作,客戶端得到正常通知。我會說SignalR不會失去連接(這就是爲什麼你沒有看到事件)......也許問題在別的地方? – Wasp
@Wasp是否嘗試修改web.config? –
當然,我是這樣做的請求之間我的「工作」頁面 – Wasp