Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 互联网断开/重新连接时未调用信号器断开_C#_Asp.net_Signalr_Signalr Hub_Signalr.client - Fatal编程技术网

C# 互联网断开/重新连接时未调用信号器断开

C# 互联网断开/重新连接时未调用信号器断开,c#,asp.net,signalr,signalr-hub,signalr.client,C#,Asp.net,Signalr,Signalr Hub,Signalr.client,我在我的应用程序中使用SignalR。我有一个应用程序,它在很大程度上取决于OnDisconnected()是否被正确调用。在下列情况下正确调用: public Task OnDisconnected() { try { DeleteUser(Context.ConnectionId); return null; } catch (Exception ex) { return null;

我在我的应用程序中使用SignalR。我有一个应用程序,它在很大程度上取决于
OnDisconnected()
是否被正确调用。在下列情况下正确调用:

 public Task OnDisconnected()
 {
     try
     {
        DeleteUser(Context.ConnectionId);
        return null;
     }
     catch (Exception ex)
     {
        return null;
     }
}
  • 用户刷新页面
  • 用户导航到新页面
  • 用户关闭浏览器

  • 但是,如果网络连接突然中断,则不会调用它。例如,如果我拔下客户端计算机上的网络电缆,或禁用客户端的无线网络,或拔下路由器,
    OnDisconnected()
    将永远不会被调用,即使等待几分钟。

    这可能不是正确的答案,但我知道:

    当连接断开时,您将无法看到突然触发的
    OnDisconnected
    事件,因为信号器没有跟踪它(它与后台任务共享连接,以查看连接是否在某个时间间隔内已断开)。当您关闭浏览器时,我猜signer会向服务器发送一个请求,以通知断开连接事件。这就是为什么你突然看到事件被触发


    但是,ASP.NET 4.5有一个
    CancellationToken
    属性,名为
    ClientDisconnectedToken
    ,用于
    HttpContext.Response
    ,在TCP连接断开时发出信号。据我所知,这仅适用于IIS 8.0,我不确定Signal是否适用于.NET 4.5 ASP.NET主机下的这一功能。

    它将引发断开连接,但不会立即引发。有一个可配置的阈值(默认情况下为30秒),信号器将在认为客户端已断开连接之前等待(在底层tcp连接消失后,这也不是立即的)。如果连接在配置的超时之前断开并重新连接,则不会引发OnDisconnected


    如果您在等待一段时间后,在某些场景中从未看到它被提出,那么它可能是一个bug。SignalR 1.0于今天发布,因此我鼓励您也尝试一下,看看您是否仍然看到了问题。

    我没有与SignalR进行过太多的合作,但我非常确定,如果用户仍然连接到集线器,那么这不是需要检查的功能之一。您可能需要实现自己的计时器,该计时器将在(x)分钟后让用户注销。只需浏览此链接,它可能会对您有所帮助:好的,谢谢dfowler..我将使用信号R1.0,现在我使用信号R0.5.3David,当我们在ASP.NET 4.5+IIS 8.0下托管SignalR时,
    HttpContext.Response.ClientDisconnectedToken
    是否受到尊重?我们不使用它,因为它有一个bug。但当它修好后,我们会使用它。