Таймауты с длительным запуском ASP.NET MVC Core Controller Метод HTTPPost
Я использую вызов ajax на страницах просмотра 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');
Метод столбца контроллера
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> MyLongRunningMethod(MyViewModel viewModel)
{
await MyProcess.Longprocess1();
await MyProcess.Longprocess2();
await MyProcess.Longprocess3();
await MyProcess.Longprocess4();
return PartialView("_MyPartialPage");
}
Это работает, но имеет только проблему для продолжительного процесса. Я получаю следующую ошибку во время режима отладки, когда процесс занимает больше, чем около 2 минут
![введите описание изображения здесь]()
Я понимаю, что это связано с истечением времени ожидания
в предыдущих версиях ASP.NET MVC вы, очевидно, можете увеличить тайм-аут в своем действии контроллера asp.net.
HttpContext.Current.Server.ScriptTimeout = 90000;
Однако этого не существует в ASP.NET Core
Я хочу увеличить тайм-аут для отладки и развертывания для конкретного контроллера asp.net.
Для производства я могу установить его глобально в web.config
, добавив requestTimeout в существующий тег httpPlatform.
например в течение 10 минут
<httpPlatform requestTimeout="00:10:00" ....
Был задан аналогичный вопрос, но ответ , используя CancellationToken
, но, читая его, похоже, он не может помочь мне с таймаутами.
- Как установить таймауты в режиме отладки Visual Studio 2015, как я могу это сделать, когда я его развертываю?
- Есть ли настройка тайм-аута контроллера, как в
ASP.NET 4
?
Ответы
Ответ 1
Установка значения RequestTimeout="00:20:00"
в теге aspNetCore
и развертывание сайта приведут к тому, что он не истечет.
Проблема теперь возникает только при запуске из режима отладки Visual Studio, но не в режиме выпуска.
Обратите внимание: в ASP.NET RTM тег httpPlatform
был заменен на aspNetCore
в aspNetCore
web.config
Пример для 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>
Ответ 2
Но в .Net Core 2.0 нет файла web.config
в проекте. Он генерируется автоматически.
Я решил проблему, добавив .UseKestrel(...)
к функции BuildWebHost
в Program.cs
следующим образом:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseKestrel(o => { o.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(10); })
.Build();
}
Ответ 3
В моем случае мы все еще имели 502 тайм-аут ошибки в 2 минуты, даже после обновления параметра requestTimeout
. Оказалось, что пустельга имеет 2-минутный тайм-аут, который необходимо переопределить:
var host = new WebHostBuilder()
.UseKestrel(o =>
{
o.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(30);
}
)
Ответ 4
По какой-то причине я по-прежнему получаю сообщение об ошибке Bad Gateway даже после выполнения приведенных выше рекомендаций. Любая помощь будет оценена.
Получение 502, ошибка BadGateway, часть основного веб-API Service Fabric ASP.Net.
Один из методов Put, у меня есть часть контроллера, выполняется более 10 минут, но я получаю ответ 502/BadGateway через 2 минуты. Я сделал следующие биты.
Часть тайм-аута KestrelCommunicationListener возвращает новый WebHostBuilder().UseKestrel(o => {o.Limits.KeepAliveTimeout = TimeSpan.FromHours(1);}).ConfigureServices(services => services.AddSingleton(serviceContext)).Use. GetCurrentDirectory()).UseStartup()
.UseServiceFabricIntegration (слушатель, ServiceFabricIntegrationOptions.None).UseUrls(url).Build();
Также установите время ожидания в web.config.
Также установите часть времени ожидания клиента при инициализации HttpClient.
Пожалуйста, дайте мне знать, как я могу решить эту проблему
Ответ 5
В Visual Studio не отображается файл web.config в обозревателе решений. Я исправил добавление файла в Solution и изменил свойство "Copy to output Directory".
Ответ 6
для меня это сработало:
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); });