我们的应用程序(WindowsCore3.1中的服务器端Blazor )在.NET服务器上的IIS中运行。我们在IIS中有多个站点运行相同的应用程序,但对于不同的客户具有不同的URL。
在(ConfigureServices)中启动时,我们希望从配置文件中加载应用程序的客户配置。这样,我们就可以使用不同的配置运行应用程序的多个实例。不能从数据库加载此信息,因为配置包含连接到数据库的详细信息。
在ASP.NET框架中,我们可以访问全局中的虚拟路径或(子)域名,然后根据该信息加载配置。
我们需要在我们的ASP.Net核心应用程序中使用相同的访问权限,或者另一种解决方法。有没有什么方法可以达到同样的效果呢?
发布于 2020-11-20 15:59:01
我能够从环境中获取应用程序池ID,然后加载配置部分作为应用程序配置:
var appPool = Environment.GetEnvironmentVariable( "APP_POOL_ID", EnvironmentVariableTarget.Process )
van sectionname = SomeMagicToParseAppPool( appPool );
var config = Configuration.GetSection( sectionName );
if ( config == null ) throw new ApplicationException($" Cannot find config section for {host}");
services.Configure<ApplicationSettings>( config );这允许我为不同的站点加载不同的配置。唯一的缺点是每个应用程序都需要自己的应用程序池。但这已经是一个要求,因为.NET核心ASP.NET应用程序必须在应用程序池中以非托管方式运行。
发布于 2020-11-12 17:20:35
区分站点的更好方法是通过URL。IIS中绑定到每个站点的域名和端口不会重复。
您可以参考这些代码来获取startup.cs中的URL。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env,IHostApplicationLifetime lifetime,IServiceProvider serviceProvider)
{
...other code...
lifetime.ApplicationStarted.Register(
() => logAddresses(app.ServerFeatures));
}
static void logAddresses(IFeatureCollection features)
{
var addressFeature = features.Get<IServerAddressesFeature>();
if (addressFeature != null)
{
foreach(var address in addressFeature.Addresses)
{
Console.Out.WriteLine(address);
}
}
}

https://stackoverflow.com/questions/64754465
复制相似问题