虽然HTTP是无状态协议,但是这个PushStreamContent类可以促进服务器发送的事件,因为您可以阅读here。 Web API实现可以存储客户端流并定期发送推送更新。但是,检测客户端何时断开连接时会出现一些问题。
在this discussion中,Henrik Nielsen表示:
检测到TCP连接已被重置是主机(ASP,WCF等)监视的东西,但在.NET 4中,ASP和WCF都没有告诉我们(Web API层)。这意味着检测断开连接的唯一可靠方式是实际向其写入数据。这就是为什么我们在样本中有关于写操作的try / catch。也就是说,响应会在失败时而不是之前得到清理。
在.NET 4.5中,有一种检测客户端断开的机制,但我还没有尝试过。
快到两年半到今天。有没有人知道这个机制是什么,以及它是否有效?
答案 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回调。您干净地关闭客户端浏览器页面,但如果您拔出网络电缆,它将不会收到通知。因此,对于这种不干净的断开连接,我们仍然需要一些其他方法来检测这种情况,例如在计时器回调期间监视故障。