Мы размещаем веб-API ASP Core внутри экземпляра сервисной фабрики.Я хочу переслать все конфиги в приложение Core.Я использую этот метод
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();
}))
};
}
Для неконфигурированной конфигурации в классе запуска действительно применяются конфиги, например:Строка подключения и протоколирование
Но, похоже, он не полностью вставлен в каркас.
Например, мне нужно явно указать ApplicationInsights с конфигурацией services.AddApplicationInsightsTelemetry(Configuration);
, в противном случае он не получает ключ инструмента.И регистрация не работает (уровень журнала не применяется).
Обновление:
Я попытался создать провайдера нестандартной конфигурации в стандартном базовом проекте без сервисной фабрики, и он работает.
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