【问题标题】:Handle multiple web.configs based on URL根据 URL 处理多个 web.config
【发布时间】:2017-03-20 23:10:56
【问题描述】:

我们目前有一个用于多个区域数据库的应用程序。代码库完全相同,但它在网络服务器上推出了 3 个不同的目录,每个目录都有自己的 web.config(访问正确的数据库并获得正确的应用程序设置)。每个都有自己的 IIS 环境。

但是,我的经理希望对此进行更改,即一个 IIS 应用程序将为每个区域动态加载正确的 web.config 文件。

我会在登录时尝试根据查询参数加载正确的 web.config 文件,但我不知道如何在登录时加载 web.config 文件。

任何有这方面经验的人......有更好的解决方案吗?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    根据您的评论,这是一种不同的方法。你有一点工作要做。

    将所有域路由到同一个网站

    我假设您每个区域都有一个域名(例如Region1.WebSite.comRegion2.WebSite.com 等)。由于需要 SSL 证书,将它们组合到一个物理网站有点棘手。必须匹配。

    两种选择:

    1. 通过三个不同的内部 IP 地址将所有三个域驱动到同一个 Web 服务器。这意味着 IIS 中的三组绑定和三个不同的证书。

    2. 使用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>
    

    将所有剩余的区域特定配置存储在数据库中

    每个数据库都有自己的配置副本,因此您只需使用正确的连接字符串检索它们即可获得正确的配置。

    【讨论】:

      【解决方案2】:

      您可以保留一个通用的 web.config,然后使用 ConfigSource 将其中的一部分移动到一个单独的文件中。详情请见this question

      一旦你在一个单独的文件中有一些配置,你可以在运行时选择一个不同的文件:

      在 ASP.NET 应用程序中,您可以在运行时为 ConfigSource 属性分配替代配置文件的名称。

      Link

      【讨论】:

      • 实际上现在我想到了这个......我不完全确定这是我需要的过程。当新用户进入应用程序并在不同的网页上时,他们会在他们之间切换 configSources 吗?也许我只需要将数据连接的名称与 cookie 或类似的东西一起存储??
      • 你打算如何检测哪个数据库与哪个用户一起使用?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 2012-07-02
      • 2021-03-20
      相关资源
      最近更新 更多