net aumentar asp timeout asp.net-core asp.net-core-mvc

timeout - aumentar - Tiempos de espera con el método HTTPPost de ASP.NET MVC Core Controller de larga ejecución



aumentar timeout web config (5)

En Visual Studio no aparece el archivo web.config en Solution Explore. Arreglé la adición del archivo en la solución y cambié la propiedad "Copiar al directorio de salida".

Hago uso de la llamada ajax en mis páginas de vista ASP.NET Core MVC

MyView.cshtml

$.ajax({ processData: false, contentType: false, data: new FormData(this), type: $(this).attr(''method''), url: $(this).attr(''action''), cache: false, success: function (data) { $(''#mydiv).html(data); $(''#bootstrapModal).modal(''show'');

Método de publicación del controlador "

[HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> MyLongRunningMethod(MyViewModel viewModel) { await MyProcess.Longprocess1(); await MyProcess.Longprocess2(); await MyProcess.Longprocess3(); await MyProcess.Longprocess4(); return PartialView("_MyPartialPage"); }

Esto funciona pero solo tiene un problema para un proceso de larga ejecución. Recibo el siguiente error durante el modo de depuración cuando el proceso tarda más de 2 minutos

Entiendo que esto tiene que ver con el tiempo de expiración

en versiones anteriores de ASP.NET MVC, aparentemente puede aumentar el tiempo de espera en la acción de su controlador asp.net.

HttpContext.Current.Server.ScriptTimeout = 90000;

Sin embargo, esto no existe en ASP.NET Core

Quiero aumentar el tiempo de espera para la depuración y la implementación de un controlador asp.net en particular.

Para la producción, puedo configurarlo globalmente en web.config agregando requestTimeout a la etiqueta httpPlatform existente. por ejemplo por 10 minutos

<httpPlatform requestTimeout="00:10:00" ....

Se hizo una pregunta similar, pero la answer dio usando un CancellationToken pero al leerlo, no parece que pueda ayudarme con los tiempos de espera.

  1. ¿Cómo configuro los tiempos de espera en el modo de depuración de Visual Studio 2015 como puedo hacer cuando lo implemento?
  2. ¿Hay una configuración de tiempo de espera por controlador como la que había en ASP.NET 4 ?

En mi caso, todavía teníamos el error de tiempo de espera 502 a los 2 minutos incluso después de actualizar el parámetro requestTimeout . Resultó que el cernícalo tiene un tiempo de espera de 2 minutos para mantener vivo que debe ser anulado:

var host = new WebHostBuilder() .UseKestrel(o => { o.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(30); } )


Establecer RequestTimeout="00:20:00" en la etiqueta aspNetCore e implementar el sitio hará que no se aspNetCore el tiempo de espera.

El problema ahora solo ocurre cuando se ejecuta desde el modo de depuración de Visual Studio pero no en el modo de lanzamiento.

Tome nota: en ASP.NET RTM, la etiqueta httpPlatform ha sido reemplazada por aspNetCore en web.config

Ejemplo para ASP.NET Core

<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/> </handlers> <aspNetCore requestTimeout="00:20:00" processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile="./logs/stdout" forwardWindowsAuthToken="false"/> </system.webServer> </configuration>


Pero en .Net Core 2.0 no hay ningún archivo web.config en el proyecto. Se genera automáticamente.

.UseKestrel(...) el problema agregando .UseKestrel(...) a la función Program.cs en el archivo Program.cs la siguiente manera:

public static IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseKestrel(o => { o.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(10); }) .Build(); }


para mí esto funcionó:

public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .ConfigureKestrel(o => { o.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(10); });