Мы недавно обновили наш обработчик WebApi, чтобы он стал полностью асинхронным c.
После того, как мы обновили его, мы видим большое количество ошибок отмены задач в файле HTTERR и в вызовах API. Наряду с этим мы видим, что ЦП сервера IIS максимально загружен.
80 HTTP/1.1 PUT /nics/29381237 - - 2 Request_Cancelled client_web_service
80 HTTP/1.1 PUT /devices/39132415 - - 2 Request_Cancelled client_web_service
80 HTTP/1.1 PUT /devices/39027793 - - 2 Request_Cancelled client_web_service
80 HTTP/1.1 PUT /nics/6733491 - - 2 Request_Cancelled client_web_service
80 HTTP/1.1 PUT /nics/29601198 - - 2 Request_Cancelled client_web_service
80 HTTP/1.1 PUT /nics/27905124 - - 2 Request_Cancelled client_web_service
80 HTTP/1.1 PUT /nics/8040740 - - 2 Request_Cancelled client_web_service
80 HTTP/1.1 PUT /nics/31765381 - - 2 Request_Cancelled client_web_service
80 HTTP/1.1 PUT /nics/6733491 - - 2 Request_Cancelled client_web_service
Обновленная версия обработчика.
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (_securityBypassList.Any(s => request.RequestUri.AbsoluteUri.ToLower().Contains(s)))
{
return await base.SendAsync(request, cancellationToken);
}
if (!HasValidHeaderToken(request))
{
throw new AuthenticationException($"Valid Token header not found.");
}
IIdentityService identityService = (IIdentityService) request.GetDependencyScope().GetService(typeof(IIdentityService));
if (identityService == null)
{
throw new ArgumentNullException(nameof(identityService));
}
UserAuthenticationDetails userAuthenticationDetails = await GetUserAuthDetailsAsync(request, identityService).ConfigureAwait(false);
if (userAuthenticationDetails == null)
{
await ProcessForNonAuthUser(request).ConfigureAwait(false);
}
else
{
IBasicAuthenticationIdentityProvider basicAuthenticationIdentityProvider = (IBasicAuthenticationIdentityProvider)request.GetDependencyScope().GetService(typeof(IBasicAuthenticationIdentityProvider));
basicAuthenticationIdentityProvider.SetBasicAuthenticationIdentity(userAuthenticationDetails);
}
return await base.SendAsync(request, cancellationToken).ConfigureAwait(false);
}
Мы увеличили время ожидания выполнения на сервере, чтобы посмотреть, поможет ли это.
httpRuntime targetFramework="4.7.1" executionTimeout="280"
Я надеюсь, что у кого-то могут быть какие-то предложения / идеалы, черт возьми, я был бы открыт для попадания в сервер с молотком, если он работал.