4

尽管 HTTP 是无状态协议,但有一个 PushStreamContent 类可以促进服务器发送事件,您可以在此处阅读。Web API 实现可以存储客户端流并定期发送推送更新。但是,检测客户端何时断开连接有点问题。

本次讨论中,Henrik Nielsen 指出:

检测到 TCP 连接已被重置是主机(ASP、WCF 等)监控的事情,但在 .NET 4 中,ASP 和 WCF 都没有告诉我们(Web API 层)这件事。这意味着检测断开连接的唯一可靠方法是实际向其写入数据。这就是为什么我们在示例中的写操作周围有 try/catch。也就是说,响应将在失败时而不是之前被清理。

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

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

4

1 回答 1

4

此链接上发布了一个有趣的响应:链接到文章

这是答案的一部分

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

这个(简化的)代码对我有用:

公共 HttpResponseMessage 获取(HttpRequestMessage 请求)

{

//注册客户端断开通知

对象客户端 ID = ...; // 这是传递给回调的对象

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

委托(对象 obj)

{

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

// obj 是传入寄存器的clientId

// 处理客户端断开连接

//...

}

, 客户标识);

// 示例中的正常代码继续

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

}

如果您干净地关闭客户端浏览器页面,则会回调 ClientDisconnect 回调,但如果您拔出网络电缆,则不会收到通知。所以对于这种不干净的断线,我们还是需要一些其他的方法来检测,比如在定时器回调的时候监控失败。

于 2015-03-06T08:25:57.407 回答