如何在ASP.NET Core WebListener中为长时间运行的操作设置超时?

时间:2017-05-17 09:22:34

标签: asp.net-core kestrel-http-server weblistener

我想为我的MVC Controller HTTP Post方法设置请求超时。我正在使用WebListener。

我发现如果你使用的是Kestel和IIS,你可以通过在aspNetCore节点上指定requestTimeout属性来设置web.config中的请求超时。

如何使用WebListener执行相同的操作? 我试图修改ListenerSettings(见下文),但这不起作用

// Use Web listener
var builder =
 new WebHostBuilder().UseConfiguration(config)
 .UseContentRoot(Directory.GetCurrentDirectory())
 .UseStartup < Startup > ()
 .UseWebListener(options => {
  options.ListenerSettings.Authentication.AllowAnonymous = true;
  options.ListenerSettings.Timeouts.EntityBody = TimeSpan.FromSeconds(1);
  options.ListenerSettings.Timeouts.DrainEntityBody = TimeSpan.FromSeconds(1);
  options.ListenerSettings.Timeouts.HeaderWait = TimeSpan.FromSeconds(1);
  options.ListenerSettings.Timeouts.IdleConnection = TimeSpan.FromSeconds(1);
  options.ListenerSettings.Timeouts.RequestQueue = TimeSpan.FromSeconds(1);
  options.ListenerSettings.ThrowWriteExceptions = true;
  options.ListenerSettings.Logger = logger;
 });

var host = builder.Build();
host.Run();

1 个答案:

答案 0 :(得分:0)

您应该撤消所有这些设置,因为它们不适用于控制器操作超时。没有什么可以使控制器代码特别超时。您应该将取消令牌传递给您想要取消的异步方法。