Увеличен запрос на выполнение задачи и использование ЦП IIS 7 в ASP webApi - PullRequest
0 голосов
/ 25 февраля 2020

Мы недавно обновили наш обработчик 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"

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

...