我们在服务结构实例中托管一个ASP Core Web api。我想将所有配置转发到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();
}))
};
}
启动类中的预期配置确实已应用了配置,例如连接字符串和日志记录
但是它似乎还没有完全融入框架。
例如,我需要使用配置services.AddApplicationInsightsTelemetry(Configuration);
显式提供ApplicationInsights,否则它将无法获取仪器密钥。并且日志记录不起作用(未应用日志级别)。
更新:
我尝试在没有服务结构的标准核心项目中执行自定义配置提供程序,并且它可以工作。
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;
}
}
因此,似乎我为Fabric Land服务的某些功能无法正常工作。
编辑:Repro项目https://github.com/AndersMalmgren/ServiceFabricLoggingRepro
答案 0 :(得分:0)
服务结构项目模板与标准Core项目不同。
服务结构项目模板可以
return new WebHostBuilder()
标准核心项目模板可以
WebHost.CreateDefaultBuilder(args)
我建议微软统一其项目模板 https://github.com/microsoft/service-fabric/issues/319#issuecomment-486116026
我也在上面提到了“应用程序见解”。它没有直接关系。应用程序见解不注入IConfiguration,而是寻找json文件。我会说这是一个错误,但这将是一个重大的变更修正
https://github.com/microsoft/ApplicationInsights-aspnetcore/issues/867