如何分离 IIS 站点的连接字符串,但维护共享的应用程序文件夹?

如何分离 IIS 站点的连接字符串,但维护共享的应用程序文件夹?

目前,我们为我们的业务设置了类似这样的设置:

- App pool 1
 - Site 1
- App pool 2
 - Site 2
- App pool 3
 - Site 3

对应的有:

C:\inetpub\Site
C:\inetpub\Site2
C:\inetpub\Site3strings)
C:\inetpub\Site4

等等。这很烦人,因为我们的代码需要跨多个文件夹维护,而人们经常忘记这样做;这是一个可以修复的问题,但我宁愿在解决方案中而不是在过程中解决它。所有文件夹中的代码都是相同的,只有 web.config 文件不同。

尽管 .NET 代码相同,我们仍以这种方式拆分站点,原因是我们需要不同的连接字符串来连接不同的服务器。这样,无论哪个站点托管绑定,都可以获得流量。这就是我们处理负载平衡的方式,虽然不是最漂亮的方式,但可以完成工作。

我宁愿有多个网站(有一个或多个应用程序池,无所谓),它们的工作方式相同,但使用一个共享代码文件夹。我需要的是一个解决方案,可以根据 IIS 中的网站处理连接字符串。我在研究虚拟目录时运气不佳,这看起来很简单,但我认为不可能,因为它需要一个 web.config 才能知道在哪里寻找虚拟目录。

我确信我在这里遗漏了一些简单的东西,但我需要一点帮助才能做到这一点:

C:\inetpub\SiteMaster (contains all .NET code)
C:\inetpub\SiteMaster\Site1_Config (only needs to tell me the connection strings)
C:\inetpub\SiteMaster\Site2_Config (only needs to tell me the connection strings)
C:\inetpub\SiteMaster\Site3_Config (only needs to tell me the connection strings)

答案1

一种选择是更改代码并使用单一集中方法来访问连接字符串。在那里,根据站点,您可以返回站点的正确字符串。您仍然可以将所有信息放入单个 web.config 中,但主连接字符串不会对数据库进行硬编码。它将在稍后添加。

根据您的代码结构,这可能需要大量工作。

更简单的方法是将连接字符串存储在根 web.config 中,而不是存储在站点的 web.config 中。

您将拥有一个带有单个 web.config 但没有连接字符串的单个站点。

他们位于:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config

或者您的应用程序池正在使用的任何框架版本。

您可以使用位置节点为不同的站点指定不同的连接字符串:

<location path="Site">
    <connectionStrings>
        <add connectionString="data source=.;integrated security=true;database=Site" name="SiteCS" />
    </connectionStrings>
</location>
<location path="Site2">
    <connectionStrings>
        <add connectionString="data source=.;integrated security=true;database=Site2" name="SiteCS" />
    </connectionStrings>
</location>
<location path="Site3">
    <connectionStrings>
        <add connectionString="data source=.;integrated security=true;database=Site3" name="SiteCS" />
    </connectionStrings>
</location> 

您可以对其他 IIS 和 Dot.NET 设置执行相同操作。

缺点可能是您必须是管理员才能更改此设置,并且如果您更改它们,服务器上的所有应用程序池都可能需要重新启动。

相关内容