我怀疑这是可能的,但客户使用我们的一个Web应用程序,他们有一个实时/测试数据库。目前更新必须转到两个文件夹,因为两者都有目录设置,web.config文件指向实时或测试。
是否有某种方法我只能使用一个目录,但IIS中的两个网络应用程序各自使用不同的web.config文件或类似的东西,所以只需要更新一个地方?
答案 0 :(得分:0)
你可以,但你必须以稍微不同的方式维护事物。您没有告诉我们的是:您使用分配配置值的唯一地方是connectionStrings
和appSettings
吗?或者还有其他差异吗?
然后,您确实需要从单独的配置文件中加载这些值,而不是由现有配置文件引用,而不是使用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>