Nginx Mono未检测到客户端断开连接

问题描述

我将Nginx用作我在Linux上的MONO上运行的ASP.NET应用程序的反向代理。 我有一个“服务器发送事件”端点,该端点提供了长时间运行的连接。一切正常,但是当客户端断开连接(用户在浏览器中导航离开表单页面)时,ASP.NET应用程序不会收到通知,并且运行逻辑的任务将继续运行。我在IIS express后面的Windows中运行了相同的控制器,并且当客户端断开连接时任务被中止。 我如何在Nginx和Mono中获得相同的行为。

以下是我的Nginx配置的相关部分

        location /health/stream {
                ...
                index index.html index.htm default.aspx Default.aspx;
                fastcgi_index Default.aspx;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_read_timeout 10;
                fastcgi_ignore_client_abort off;
                send_timeout 10;
                include /etc/Nginx/fastcgi_params;
        }

以下是C#控制器功能

[HttpGet]
[Route("stream")]
public HttpResponseMessage GetStream(CancellationToken clientdisconnectToken)
{
    var response = this.ActionContext.Request.CreateResponse();
    response.Content = new PushStreamContent(async (outputStream,httpContext,transportContext) =>
    {
        using (var writer = new StreamWriter(outputStream))
        {
            using (var consumer = new BlockingCollection<string>())
            {
                // DataGeneratorAsync generates some random data
                var eventGeneratorTask = DataGeneratorAsync(consumer,clientdisconnectToken);
                foreach (var ev in consumer.GetConsumingEnumerable(clientdisconnectToken))
                {
                  await writer.WriteLineAsync("data: " + ev);
                  await writer.WriteLineAsync();
                  await writer.FlushAsync();
                }
                await eventGeneratorTask;
            }
        }
    },"text/event-stream");
    // for Nginx
    response.Headers.Add("X-Accel-Buffering","no");
    return response;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)