使用Web API中的PushStreamContent检测客户端断开连接

时间:2015-01-16 19:43:44

标签: asp.net-web-api pushstreamcontent

虽然HTTP是无状态协议,但是这个PushStreamContent类可以促进服务器发送的事件,因为您可以阅读here。 Web API实现可以存储客户端流并定期发送推送更新。但是,检测客户端何时断开连接时会出现一些问题。

this discussion中,Henrik Nielsen表示:

  

检测到TCP连接已被重置是主机(ASP,WCF等)监视的东西,但在.NET 4中,ASP和WCF都没有告诉我们(Web API层)。这意味着检测断开连接的唯一可靠方式是实际向其写入数据。这就是为什么我们在样本中有关于写操作的try / catch。也就是说,响应会在失败时而不是之前得到清理。

     

在.NET 4.5中,有一种检测客户端断开的机制,但我还没有尝试过。

快到两年半到今天。有没有人知道这个机制是什么,以及它是否有效?

1 个答案:

答案 0 :(得分:3)

此链接发布了一个有趣的回复:link to the article

这是答案的一部分

在.NET 4.5中,有一种检测客户端断开的机制,但我还没有尝试过。

这个(简化的)代码适用于我:

  

public HttpResponseMessage Get(HttpRequestMessage request)

     

{

     
    

//注册客户端断开连接通知

         

object clientId = ...; //这是传递给回调的对象

         

System.Web.HttpContext.Current.Response.ClientDisconnectedToken.Register(

         
      

委托(对象obj)

             

{

             
        

//客户端已完全断开连接

                 

// obj是传入寄存器

的clientId                  

//处理客户端断开连接

                 

// ...

      
             

}

    
         

,clientId);

         

//样本中的正常代码继续

         

response.Content = new PushStreamContent(...);

  
     

}

如果例如,则回调ClientDisconnect回调。您干净地关闭客户端浏览器页面,但如果您拔出网络电缆,它将不会收到通知。因此,对于这种不干净的断开连接,我们仍然需要一些其他方法来检测这种情况,例如在计时器回调期间监视故障。