我们目前有一个用于多个区域数据库的应用程序。代码库完全相同,但是它在网络服务器上推出了3个不同的目录,每个目录都有自己的web.config(点击正确的数据库并获得正确的应用程序设置)。每个都有自己的IIS环境。
但是,我的经理希望这个改变,即一个IIS应用程序,它将为每个区域动态加载正确的web.config文件。
登录时我会尝试根据查询参数加载正确的web.config文件,但我不知道如何在登录时加载web.config文件。
任何有这方面经验的人都有更好的解决方案吗?
答案 0 :(得分:2)
根据您的评论,这是一种不同的方法。你还有一点工作要做。
我假设您每个地区都有一个域名(例如Region1.WebSite.com
,Region2.WebSite.com
等)。由于需要SSL证书,将这些域名合并到一个物理网站上有点棘手。必须匹配。
两个选项:
通过三个不同的内部IP地址将所有三个域驱动到同一个Web服务器。这意味着IIS中有三组绑定和三种不同的证书。
使用SSL offloading并在负载均衡器处终止SSL。将所有三个站点指向IIS上的相同内部IP地址。确保已将LB配置为转发原始主机标头。
在ASP.NET代码中,您可以use the host header查看请求提交的域名,例如
var siteRequested = Request.Headers["Host"];
在web.config中需要多个条目,每个连接字符串一个。格式化连接字符串的名称以包含主机名,以便您可以使用以下内容获取正确的字符串:
var configItemName = "ConnectionString." + Request.Headers["Host"];
var connectionString = System.Configuration.ConfigurationManager.ConnectionStrings[configItemName].ConnectionString;
您的web.config连接字符串应如下所示:
<connectionStrings>
<add name="ConnectionString.Region1.WebSite.com" connectionString="Data Source=serverNameForRegion1;Et Cetera" />
<add name="ConnectionString.Region2.WebSite.com" connectionString="Data Source=serverNameForRegion2;Et Cetera" />
<add name="ConnectionString.Region3.WebSite.com" connectionString="Data Source=serverNameForRegion3;Et Cetera" />
</connectionStrings>
每个数据库都有自己的配置副本,所以你只需要使用正确的连接字符串检索它们,你就可以获得正确的配置。
答案 1 :(得分:0)
您可以使用ConfigSource
保留常见的web.config,然后将其中的一部分移动到单独的文件中。有关详细信息,请参阅this question。
在单独的文件中有一些配置后,您可以在运行时选择其他文件:
在ASP.NET应用程序中,在运行时,您可以为ConfigSource属性分配备用配置文件的名称。