【发布时间】:2016-04-29 03:50:24
【问题描述】:
我在作为服务运行的服务器上运行 SignalR Hub。该服务器无论出于何种原因,都可能由于断电、正在更新(我们使用八达通自动更新)或其他原因而停止。
如果我有一个连接到此服务的用户向服务器发送消息,然后又将此消息转发到传感器。然后传感器向服务器返回一条消息,并转发到客户端 web 应用程序。
这在第一次连接时工作正常。如果服务在重新连接超时之前停止并重新启动,我会使用相同的连接 ID 重新连接,并且可以发送消息。但是,我不能接收消息。
如果我刷新页面,我会得到它们,因为这会创建一个新的连接。无论是OnConnect() 还是OnReconnect(),都会调用相同的代码。
示例
public override Task OnConnected()
{
EstablishConnection("Connect");
return base.OnConnected();
}
public override Task OnReconnected()
{
// Remove old Connection Id to receive messages on reconnect
ConnectionsHandler.Instance.RemoveTerminalClient(Context.ConnectionId);
EstablishConnection("Reconnect");
// This block is to tell the user that connection has been reconnected. This message shows on the webapp so connection has been restored.
var hubContext = GlobalHost.ConnectionManager.GetHubContext<TerminalHub>();
var message = TerminalMessageColorer.ColorMessageLime(String.Format("Connection has been re-established!"));
hubContext.Clients.Client(Context.ConnectionId).TerminalEcho(message);
return base.OnReconnected();
}
private void EstablishConnection(string conType)
{
ConnectionsHandler.Instance.AddTerminalClient(Context.ConnectionId, "null");
var terminal = ConnectionsHandler.Instance.GetTerminalClient(Context.ConnectionId);
#if DEBUG
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("{0}\t{1}\t...{2}", terminal, Context.ConnectionId, conType);
#endif
}
【问题讨论】:
标签: javascript c# angularjs signalr