问题描述
我将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 (将#修改为@)