相同的应用程序和目录,但不同的web.config文件?

时间:2012-10-08 14:43:08

标签: asp.net iis

我怀疑这是可能的,但客户使用我们的一个Web应用程序,他们有一个实时/测试数据库。目前更新必须转到两个文件夹,因为两者都有目录设置,web.config文件指向实时或测试。

是否有某种方法我只能使用一个目录,但IIS中的两个网络应用程序各自使用不同的web.config文件或类似的东西,所以只需要更新一个地方?

2 个答案:

答案 0 :(得分:0)

你可以,但你必须以稍微不同的方式维护事物。您没有告诉我们的是:您使用分配配置值的唯一地方是connectionStringsappSettings吗?或者还有其他差异吗?

然后,您确实需要从单独的配置文件中加载这些值,而不是由现有配置文件引用,而不是使用System.Configuration.ConfigurationManager或其任何命名空间/实用程序加载。下一步是使用传入的URL来隔离设置类使用的数据,以了解要加载的两个数据点中的哪一个。

否则,如果你以这种方式编写应用程序,这是完全有效的(只是与我们过去在世界其他地方做的事情相悖)。

答案 1 :(得分:0)

根据您的数据库连接系统,您可以根据用户设置而不是基于web.config为其提供连接字符串?必须有某种方法来决定用户想要使用哪个数据库,这可能是像按钮或下拉列表一样简单的选择,或者保持系统有两个文件夹,但使用URL路由使它们都指向同一个文件。然后,当您实例化数据库连接时,您可以提供正确的连接字符串,然后进行设置。

编辑:聊天后解决方案是在web.config中放置两个连接字符串,一个用于测试数据库,另一个用于生产。然后添加路由以假装两个文件夹仍然存在,具有以下基本思想:

routes.Add(new Route("{folder}/{page}", new PageRouteHandler("~/{page}")));

最后一个函数根据路由值中的folder值来决定使用哪个连接字符串:Request.RequestContext.RouteData.Values["folder"],以及使用此动态连接字符串而不是硬编码字符串的全局重构。


对于拥有“多个”web.configs,您可以创建一个特定于文件路径的配置部分,请参阅http://msdn.microsoft.com/en-us/library/b6x6shw7%28v=vs.71%29.aspx但是我不确定这是否适用于连接字符串。

示例:

<configuration>
   <location path="Logon.aspx">
      <system.web>
         <authorization>
            <allow users="?"/>
         </authorization>
      </system.web>
   </location>
</configuration>