#c# #asp.net-core #azure-service-fabric
#c# #asp.net-ядро #azure-service-fabric
Вопрос:
Мы размещаем веб-api ядра ASP внутри экземпляра service fabric. Я хочу переслать все конфигурации в основное приложение. Я использую этот метод
https://dzimchuk.net/configuring-asp-net-core-applications-in-service-fabric/
А затем я вызываю его с помощью ConfigureAppConfiguration
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[]
{
new ServiceInstanceListener(serviceContext =>
new KestrelCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) =>
{
ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting Kestrel on {url}");
return new WebHostBuilder()
.UseKestrel()
.ConfigureServices(
services => services.AddSingleton(serviceContext))
.ConfigureAppConfiguration(builder => builder.AddServiceFabricConfiguration(serviceContext))
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.UseReverseProxyIntegration)
.UseUrls(url)
.Build();
}))
};
}
К измененной конфигурации в классе startup применяются конфигурации, такие как строка подключения и ведение журнала
Но, похоже, она не полностью встроена в фреймворк.
Например, мне нужно явно указать ApplicationInsights в конфигурации services.AddApplicationInsightsTelemetry(Configuration);
, иначе он не распознает ключ инструмента. И ведение журнала не работает (уровень журнала не применяется).
Обновить:
Я попытался создать пользовательский поставщик конфигурации в стандартном базовом проекте без service fabric, и это работает.
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(builder => builder.AddServiceFabricConfiguration())
.UseStartup<Startup>();
}
internal class ServiceFabricConfigurationProvider : ConfigurationProvider
{
public override void Load()
{
Data["Logging:Debug:LogLevel:Default"] = "Information";
}
}
internal class ServiceFabricConfigurationSource : IConfigurationSource
{
public IConfigurationProvider Build(IConfigurationBuilder builder)
{
return new ServiceFabricConfigurationProvider();
}
}
public static class ServiceFabricConfigurationExtensions
{
public static IConfigurationBuilder AddServiceFabricConfiguration(this IConfigurationBuilder builder)
{
builder.Add(new ServiceFabricConfigurationSource());
return builder;
}
}
Так что, похоже, что-то, что я обслуживаю, работает не так, как должно.
редактировать: проект Repro https://github.com/AndersMalmgren/ServiceFabricLoggingRepro
Комментарии:
1. Если я понимаю ваш вопрос, вы считаете, что конфигурация должна быть введена в ApplicationInsights. Но это не так. Ваш описанный подход верен, смотрите Также Здесь: github.com/Microsoft/ApplicationInsights-aspnetcore/wiki /…
2. Само по себе это не связано с app.insight. Скорее, конфигурация, похоже, не улавливает ее. Например, мои настройки ведения журнала (не appinsight, а debug logger) не работают. редактировать: когда app insight работает должным образом, вам не нужно предоставлять ему конфигурацию, я заставил его работать с нашим приложением vanilla COre, когда оно не размещено в service fabric, просто вызвав AddApplicationInsightsTelemetry() с пустой сигнатурой метода
Ответ №1:
Шаблон проекта service fabric отличается от стандартного основного проекта.
Шаблон проекта Service fabric выполняет
return new WebHostBuilder()
В то время как стандартный шаблон основного проекта выполняет
WebHost.CreateDefaultBuilder(args)
Я предложил Microsoft унифицировать свои шаблоны проектов
https://github.com/microsoft/service-fabric/issues/319#issuecomment-486116026
Я также упоминал выше информацию о приложениях. Это не связано напрямую. Application insights не вводит конфигурацию значков, а скорее ищет файл json. Я бы сказал, что это ошибка, но это было бы решающим изменением для ее исправления
https://github.com/microsoft/ApplicationInsights-aspnetcore/issues/867