Мы готовимся к развертыванию одного из наших первых ASP. NET базовых приложений и видим некоторые очень странные проблемы с производительностью на нашем промежуточном веб-сервере. На машинах разработки все выглядит нормально, либо на IIS Express, либо на тестовом сайте, настроенном на обычном IIS, который близко отражает конфигурацию на веб-сервере.
Код, похоже, ничего не делает необычно, но при работе на веб-сервере, кажется, время от времени просто входит в состояние фуги / блокируется. Журналы не указывают на какие-либо проблемы как таковые , но временные метки имеют очень длинные и неожиданные пробелы при работе на этом компьютере.
Приложение. NET Core 2.2, работает в процессе на IIS. Локальные машины Windows 10, сервер Windows Server 2012r2. Веб-сервер является общим компьютером, на котором настроены другие сайты, но это приложение является отдельным сайтом и отдельным пулом приложений от любого другого.
Вот фрагмент кода контроллера API, который вызывает метод в компоненте службы для аутентификации пользователя во внешней системе:
AuthenticationResult result;
try {
_logger.LogTrace("Will attempt user authentication for source {1} {2}", source.Id, source.Name);
result = await system.AttemptUserAuthenticationAsync(model);
if( null == result?.ExternalKey ) {
return UserInformationResult.Empty;
}
}
catch( ValidationException ex ) {
_logger.LogTrace(ex, "Validation failed for authentication submission for source {1} {2}", source.Id, source.Name);
return ValidationProblem(ex.ModelState);
}
Вот код проверки в одной из AttemptUserAuthenticationAsync()
реализаций:
var validationResults = new List<ValidationResult>();
if( String.IsNullOrWhiteSpace(credentials.Username) ) {
validationResults.Add(new ValidationResult(_localizer["Please provide a username"], new[] { nameof(credentials.Username) }));
}
if( String.IsNullOrEmpty(credentials.Password) ) {
validationResults.Add(new ValidationResult(_localizer["Please provide a password"], new[] { nameof(credentials.Password) }));
}
if( validationResults.Any() ) {
_logger.LogTrace("Authentication credentials invalid; will throw ValidationException");
throw new Models.ValidationException(validationResults);
}
Вот что log выглядит так, когда этот код выполняется на проблемном веб-сервере, с интервалом три минуты между тем, где должно быть сгенерировано исключение, и тем, где оно перехватывается в вызывающем коде. Эта конкретная проблема кажется довольно последовательной. На рабочих станциях команды разрыв в журнале здесь составляет несколько миллисекунд.
2020-01-15 10:38:26.969 -05:00 [VRB] Authentication credentials invalid; will throw ValidationException
2020-01-15 10:41:29.859 -05:00 [VRB] Validation failed for authentication submission for source "b8c28eac-09e4-4a0c-82a1-b1b788c04467" Test Source
Я с некоторой растерянностью, где go с этой проблемой. Есть ли настройки, которые мы должны посмотреть? Другие журналы? Что может быть причиной того, что это приложение блокируется таким образом?