c# - 在 ASP.NET 上使用服务器发送的事件时如何检测断开连接?

标签 c# javascript asp.net html server-sent-events

我在 ASP.NET 中有以下 SSE 处理程序

Response.ContentType = "text/event-stream";
while (true)
{
    Response.Write(string.Format("data: {0}\n\n", DateTime.Now.ToString()));
    Response.Flush();
    System.Threading.Thread.Sleep(1000);
}

它会无限期地运行,即使在我关闭客户端应用程序之后也是如此。如何通知服务器停止处理程序?

我在客户端试过:

var source = new EventSource('Handler.aspx');
window.onunload = function() {
     source.close();
}

但是我没有成功。

最佳答案

您可以使用 HttpResponse 类的 IsClientConnected 属性来检测客户端断开连接。

这是一个小例子:

Response.ContentType = "text/event-stream";
while (true)
{
  Response.Write(string.Format("data: {0}\n\n", DateTime.Now.ToString()));
  Response.Flush();

  if (Response.IsClientConnected == false)
  {
    break;
  }
  System.Threading.Thread.Sleep(1000);
}

因此,使用 IsClientConnected 属性您应该能够检测到:

  1. 在客户端使用 source.close() 关闭源。
  2. 通过关闭浏览器窗口或导航到另一个网站来关闭连接。

我已经使用 ASP.Net 4.0 和 Google Chrome 测试了我的代码。

关于c# - 在 ASP.NET 上使用服务器发送的事件时如何检测断开连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9743253/

相关文章:

c# - 协程/响应式(Reactive)扩展 - 写行

c# - 使用 MVC4 返回值的正确方法

asp.net - Orchard CMS - 确定模型在内容项驱动程序中是否有效

c# - 如何在 .NET Core 中修改文件访问控制

c# - 无法创建相对 URI,因为 'uriString' 参数表示绝对 URI

javascript - 允许插入文本框或下拉值 javascript

javascript - 删除 tslib 作为生产依赖项

javascript - 一个意外的空间而不是不必要的复选框标签

asp.net - 如何检查IIS是32位还是64位模式

c# - 将 list<自定义对象> 转换为 list<对象>