【发布时间】:2016-07-03 02:49:40
【问题描述】:
我想检测与 ASP.NET Core 上的 SSE(服务器发送事件)的断开连接。旧方式Response.IsClientConnected 不起作用。你有解决这个问题的办法吗?
【问题讨论】:
标签: c# asp.net-core asp.net-core-mvc server-sent-events .net-core
我想检测与 ASP.NET Core 上的 SSE(服务器发送事件)的断开连接。旧方式Response.IsClientConnected 不起作用。你有解决这个问题的办法吗?
【问题讨论】:
标签: c# asp.net-core asp.net-core-mvc server-sent-events .net-core
我找到了问题的临时解决方案。临时的,因为在尝试发送请求时检测到IsCancellationRequested 并且失败,而不是在用户在发送请求之前断开连接时
if (HttpContext.RequestAborted.IsCancellationRequested == true)
{
break;
}
【讨论】:
在 .NET Core 2.0 中:
此方法创建一个端点,该端点将在 60 秒后返回 null。如果请求在这 60 秒内被取消,该方法将立即返回 null。
[HttpGet]
public async Task<string> Get()
{
Request.HttpContext.RequestAborted.WaitHandle.WaitOne(60000);
return null;
}
此方法在请求连接时执行多个工作单元,直到工作完成。
[HttpGet]
public async Task<Items[]> Get()
{
Item item = null;
List<Items> items = new List<Items>();
do
{
item = DoRepitiousWork();
Items.Add(item);
}
while (!Request.HttpContext.RequestAborted.IsCancellationRequested && !item.IsLast);
return items.ToArray();
}
【讨论】: