虽然HTTP是一种无状态协议,但有一个PushStreamContent类可以促进服务器发送的事件,你可以在这里阅读。Web API 实现可以存储客户端流并定期发送推送更新。但是,在客户端断开连接时进行检测有点问题。
在这次讨论中,Henrik Nielsen指出:
检测到 TCP 连接是否已重置是主机(ASP、WCF 等)监视的内容,但在 .NET 4 中,ASP 和 WCF 都没有告诉我们(Web API 层)有关它的信息。这意味着检测断开连接的唯一可靠方法是实际向其写入数据。这就是为什么我们在示例中的写入操作周围有 try/catch 的原因。也就是说,响应将在失败时而不是之前被清理。
在.NET 4.5中,有一种用于检测客户端断开连接的机制,但我还没有尝试过。
快进两年半到今天。有没有人知道这个机制是什么,它是否有效?
一个有趣的回应是在这个链接上发布的:链接到文章
这是答案的一部分
在.NET 4.5中,有一种用于检测客户端断开连接的机制,但我还没有尝试过。
这个(简化的)代码对我有用:
public HttpResponseMessage Get(HttpRequestMessage request)
{
注册客户端断开连接通知
对象客户端 ID = ...; 这是传递给回调的对象
System.Web.HttpContext.Current.Response.ClientDisconnectedToken.Register(
委托(对象对象)
{
客户端已完全断开连接
obj 是传入寄存器的客户端 ID
处理客户端断开连接
//...
}
, 客户端 ID );
示例中的正常代码继续
响应。Content = new PushStreamContent(...);
}
例如,如果您干净地关闭了客户端浏览器页面,则会回调 ClientDisconnect 回调,但如果您拔出网线,则不会收到通知。因此,对于这种不干净的断开连接,我们仍然需要一些其他方法来检测这一点,例如在计时器回调期间监视失败。