根据域名自定义web.config

时间:2012-03-13 16:34:35

标签: asp.net web-config

我的大多数网站都包含一个LIVE(生产)和两个TEST环境,可通过三个不同的域名访问,例如。

www.mysite.com
test1.mysite.com
test2.mysite.com

上述每一个都是IIS网站,当它们都运行相同版本的网站时,它指向相同的物理版本化文件夹。

我在发布新版本时通常会将新版本放入新的物理文件夹,例如 / inetpub / wwwroot / mywebsite / v41 / 并将其中一个TEST站点指向该版本的站点并进行测试。一旦通过,LIVE(和其他TEST)网站也被重新命名为新版本(例如v41)。

现在我的问题是这个。每个网站都有自己的数据库(TEST有一个LIVE的副本,可以通过几个SQL BACKUP / RESTORE命令刷新)但是,这三个站点都“查看”同一个web.config文件,因此相同的数据库连接字符串(System.Data.SqlClient或System.Data.EntityClient提供程序)。

是否有任何方式可以将web.config配置为根据传入请求的域名/ IIS网站提供不同的 connectionStrings

可能是符合给定标签的标签或属性吗?

我一直在找一个解决方案,但还没有找到解决方案。 提前致谢, BloodBaz

3 个答案:

答案 0 :(得分:1)

有两种方法可以管理多个环境特定的Web.config文件....

  1. 使用t4模板,下面是该链接 http://ilearnable.net/2010/08/02/t4-for-complex-configuration/

  2. VS Configuration Manager并为您的项目创建新的“LIVE”,“test1”,“test2”构建配置,查看链接

  3. http://weblogs.asp.net/scottgu/archive/2007/09/21/tip-trick-automating-dev-qa-staging-and-production-web-config-settings-with-vs-2005.aspx

    希望这会有所帮助..

答案 1 :(得分:0)

为什么不拆分配置文件,以便connectionStrings.config是它自己的文件。然后,您可以部署所有内容,而不是覆盖该connectionString文件。

你通常会把connectionString放到这里

<connectionStrings configSource="connectionStrings.config" />

然后创建一个名为connectionString.config的文件

<?xml version="1.0"?>
<connectionStrings>

</connectionStrings>

或者,除了发布/调试之外,您还可以创建另一个构建选项。您可以使用web.config转换输出不同的配置文件,具体取决于选择的文件。

答案 2 :(得分:0)

我有类似的问题;我通过在同一个Web配置文件中设置所有数据库连接信息,然后编写一个动态决定的处理程序,根据请求和上下文,它所在的环境并使用该数据库来解决它。