检查连接在ASP.NET中处于活动状态

时间:2009-04-17 17:25:15

标签: asp.net iis comet

我使用ASP.NET编写的Comet应用程序。有一组活动连接上下文(HttpContext)。并且有一个线程应该定期迭代集合并检查它们的状态。因此,应用程序体系结构不是每个请求的线程。

检查连接是否处于活动状态(未由远程主机关闭)的最佳方法是什么?

我发现了这个:

context.Response.Write(' ');
context.Response.Flush();

if (!context.Response.IsClientConnected)
{
    // ...
}

但这不是一个好的解决方案,因为它需要一个线程时间来处理(Flush()是阻塞操作)。我需要的解决方案对于许多并发连接非常快,并且不使用阻塞操作。

也许有一些IIS或ASP.NET功能允许以这种方式监控连接?

1 个答案:

答案 0 :(得分:2)

简短的回答是......不。 ASP.NET知道为IsClientConnected返回false的唯一方法是用户对服务器进行不同的调用,或者先前已调用Response.Close。根据我的经验,用户很可能关闭连接并仍然使IsClientConnected返回true。只要考虑正在进行的基础HTTP通信,您就可以看到原因。

你想要完成什么?