Как увеличить время ожидания службы приложений Azure для моего API ASP.NET Core 2.0 - PullRequest
0 голосов
/ 25 мая 2018

У меня есть API-интерфейс ASP.NET Core 2.0, который я развертываю в службе приложений Azure.Это работало нормально до недавнего времени, когда мне пришлось обрабатывать запрос, который занимал более 2 минут, и я получил 502 Bad Gateway с указанием

"The specified CGI application encountered an error and the server terminated the process". 

Это постоянно происходит, когда я нажимаю на 2-минутную отметку наэтот процесс.

Мой диагностический файл журнала говорит:

018-05-25 02:07:01.462 +00:00 [Error] Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware: An unhandled exception has occurred while executing the request
System.Threading.Tasks.TaskCanceledException: A task was canceled.

Я работаю в предположении, что это проблема тайм-аута, потому что она всегда находится на отметке 2 минуты, и я знаю, что запрос занимает больше времени.чем 2 минуты, чтобы закончить.Поэтому я изучал, как увеличить время ожидания, и нашел несколько сообщений в SO, в которых говорилось об использовании файла applicationHost.xdt, который помещался в корень папки Site для сайта.Я использую этот XML;

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.applicationHost>
    <webLimits xdt:Transform="SetAttributes(connectionTimeout)" connectionTimeout="00:05:00" />
  </system.applicationHost>
</configuration>

Когда я загружаю его, используя консоль отладки Kudu, в корень папки Site для моего слота развертывания, который я использую, чтобы проверить мой API, а затем посмотреть на файл преобразованияЯ вижу следующее:

2018-05-24T19:34:19 Start 'site' site extension transform
2018-05-24T19:34:19 StartSection Executing SetAttributes (transform line 4, 16)
2018-05-24T19:34:19 on /configuration/system.applicationHost/webLimits
2018-05-24T19:34:19 Applying to 'webLimits' element (no source line info)
2018-05-24T19:34:19 Set 'connectionTimeout' attribute
2018-05-24T19:34:19 Set 1 attributes
2018-05-24T19:34:19 EndSection Done executing SetAttributes
2018-05-24T19:34:19 Successful 'D:\home\site\applicationHost.xdt' site extension transform

, который, на мой взгляд, успешно применил преобразование XDT.

Однако даже после перезапуска базовой службы приложений и соответствующего слота развертывания.Я все еще получаю сообщение об ошибке.

Итак, я использую неправильную настройку тайм-аута?

Когда я смотрю на файл web.config в папке slots sites / wwwroot, он содержит только это ...

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\Mypp.dll" 
stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
  </system.webServer> 

Я ожидал увидеть информацию о времени ожидания соединения, которое былов файле XDT я применил.Итак, возможно, это не тот файл web.config?

Я не эксперт по Azure, и на данный момент я чувствую, что теряю время, поэтому я хотел проверить, есть ли у кого-нибудь предложения.

1 Ответ

0 голосов
/ 25 мая 2018

requestTimeout :

Указывает продолжительность, в течение которой основной модуль ASP.NET ожидает ответа от процесса, прослушивающего% ASPNETCORE_PORT%.

В версиях базового модуля ASP.NET, поставляемых с выпуском ASP.NET Core 2.0 или более ранней версии, requestTimeout должен быть указан только в целых минутах, в противном случае по умолчанию он равен 2 минутам.

Youможно попробовать добавить requestTimeout="00:20:00 в web.config в папку slots sites / wwwroot.

<aspNetCore
  requestTimeout="00:20:00"
  processPath="%LAUNCHER_PATH%"
  arguments="%LAUNCHER_ARGS%"
  stdoutLogEnabled="false"
  stdoutLogFile=".\logs\stdout">
  <environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="staging" /> <!-- value could be "development", "staging" or "production"-->
  </environmentVariables>
</aspNetCore>

Для получения дополнительной информации вы можете обратиться к этой статье, чтобы узнать о Базовом модуле ASP.NET.ссылка на конфигурацию

...