【发布时间】:2019-08-30 20:14:42
【问题描述】:
我们在服务结构实例中托管一个 ASP Core Web API。我想将所有配置转发到核心应用程序。我用这个方法
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;
}
}
所以我服务的结构域似乎没有按应有的方式工作。
编辑:复制项目https://github.com/AndersMalmgren/ServiceFabricLoggingRepro
【问题讨论】:
-
如果我理解您的问题,您认为应该将配置注入 ApplicationInsights。但这种情况并非如此。您描述的方法是正确的,另请参见此处:github.com/Microsoft/ApplicationInsights-aspnetcore/wiki/…
-
它本身与 app.insight 无关。而是配置似乎没有拾取它。例如,我的日志记录设置(不是 appinsight 而是调试记录器)不起作用。编辑:当应用程序洞察力正常工作时,您不需要为其提供配置,我只需调用带有空方法签名的 AddApplicationInsightsTelemetry() 就可以在未托管在服务结构中时与我们的 vanilla COre 应用程序一起使用
标签: c# asp.net-core azure-service-fabric