检测客户端与 Web API 中的 PushStreamContent 的连接



虽然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 回调,但如果您拔出网线,则不会收到通知。因此,对于这种不干净的断开连接,我们仍然需要一些其他方法来检测这一点,例如在计时器回调期间监视失败。

最新更新