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.
- ¿Cómo configuro los tiempos de espera en el modo de depuración de Visual Studio 2015 como puedo hacer cuando lo implemento?
-
¿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
<?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); });