Задача была отменена в ConfigurationManager.GetConfigurationAsync(отмена функции отмены) в .NET Core

#c# #asp.net-core #.net-core #identityserver4 #.net-5

Вопрос:

У меня есть два проекта, один на .NET 5, а другой на .NET Core 3.1.

В последнее время я включил ведение журнала электронной почты, отправляя мне электронные письма всякий раз, когда возникает ошибка.

Время от времени я получаю электронное письмо со следующей ошибкой:

 [Error] An unhandled exception has occurred while executing the request. System.Threading.Tasks.TaskCanceledException: A task was canceled.  at Microsoft.IdentityModel.Protocols.ConfigurationManager`1.GetConfigurationAsync(CancellationToken cancel)  at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()  at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()  at Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.AuthenticateAsync()  at Microsoft.AspNetCore.Authentication.AuthenticationService.AuthenticateAsync(HttpContext context, String scheme)  at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)  at Serilog.AspNetCore.RequestLoggingMiddleware.Invoke(HttpContext httpContext)  at Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.lt;Invokegt;g__Awaited|6_0(ExceptionHandlerMiddleware middleware, HttpContext context, Task task)   

Проблема в том, что ошибка никогда не возникает в локальной среде разработки, и это, вероятно, соответствует некоторой нестабильности сети, но я не уверен, с чего начать поиск.

Для настройки всего приложения я использую следующую инициализацию, позволяющую вводить объект AppSettings в любой класс:

 services.Configurelt;AppSettingsgt;(Configuration); var appSettings = Configuration.Getlt;AppSettingsgt;(); var mqServerConnection = appSettings.MQServerConnection;  var identiyServerConfig = Configuration.GetSection(nameof(appSettings.IdentiyServerConnection)); services.Configurelt;IdentiyServerConnectiongt;(identiyServerConfig);  var mqServerConfig = Configuration.GetSection(nameof(appSettings.MQServerConnection)); services.Configurelt;MQServerConnectiongt;(mqServerConfig);  

И тогда я смогу использовать настройки приложений в качестве:

 public MyClassCtor(IOptionslt;AppSettingsgt; options) {  var appSettings = options.Value; }  

Кроме того, для аутентификации я использую существующий сервер идентификации, и вот как я интегрируюсь с ним:

 services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)  .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, config =gt;  {  config.Authority = appSettings.IdentiyServerConnection.Authority;  config.Audience = appSettings.IdentiyServerConnection.Audience;  config.RequireHttpsMetadata = appSettings.IdentiyServerConnection.RequireHttpsMetadata;  config.BackchannelHttpHandler = WebHostEnvironment.IsProduction() ? new HttpClientHandler() : new HttpClientHandler  {  ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator  };  if (WebHostEnvironment.IsDevelopment())  {  config.TokenValidationParameters.ClockSkew = TimeSpan.FromDays(10);  }  });  

А затем использовать эту форму аутентификации:

 ••• app.UseAuthentication(); •••  

Опять же, не знаю, с чего начать поиски, буду очень признателен за любую помощь, заранее спасибо..

Комментарии:

1. Привет @bfahm, вы можете добавить регистратор в свой проект, чтобы узнать, где возникла такая проблема.