2009-02-04 93 views
5

我正在将SQL服务器移动到单独的机器上。目前我们正在同一个盒子上运行我们的Web服务器和SQL服务器。所以我们有一个带有IIS和SQLServer的生产服务器,然后是一个独立的开发服务器来反映这个设置。开发vs生产:连接字符串

当谈到我们的asp.net控件的app.config和web站点的web.config时,这很好用,因为我们可以使用“Initial Catalogue = MyDB; ...”,它的工作原理是因为DB名称是两台机器上都一样。

现在我期待在运行这两个数据库对同一个盒子(MYDB,MYDB-DEV)。有没有一种简单的方法来做到这一点,而无需每次部署或编译时都需要编辑web.config和app.config?这是Visual Source Safe可以处理的事情吗?

回答

7

这是我使用的解决方案。在网上。配置,将下面的 “包括” 行:

<connectionStrings configSource="WebCS.config"/> 

然后,创建WebCS.config文件并输入以下内容:

<connectionStrings> 
<add name="ConnString" 
    connectionString="Data Source=YourServer;Initial Catalog=YourDB;etc.. 
    providerName="System.Data.SqlClient"/> 
</connectionStrings> 

然后,在VS站点发布后,取出WebCS。配置文件(我有一个批处理文件来做到这一点),然后捆绑其他所有东西以便传输到新机器。然后你可以确信,所有的Web.Config文件设置都与你同时使用,而不会影响你的连接字符串。

+0

谢谢你接受我的回答。我希望它能像你一样适合我! – 2009-02-04 21:16:45

1

我可能不会在这里完全明白你的问题,但在我看来,当你部署应用程序,你可以简单地不除非有在web.config中需要做出的改变重新部署的web.config 。换句话说,将所有文件复制到目录,但 web.config文件除外。

如果你要改变部署之间的web.config文件,你需要编辑web.config每个服务器。

或者,你会发现每一台机器上的另一个地方来存储比web.config中其他的连接字符串。

4

部署的web.config是几乎从来没有将文件复制从开发到PROD的情况。有不同的条目是正常的,例如您的开发网站指向本地数据库或开发数据库框,您的prod网站通常必须指向您的prod数据库框。

部署时,你生产的web.config通常只需要,如果你做了你的应用程序,需要新的配置元素的架构性变化或要删除多余的那些改变。

随着源控制,通常的做法是排除的web.config和具有可以被用作用于创建配置文件的基础的模板文件,例如web.config.template。在对web.config进行结构更改时,应对web.config.template进行更改,然后为dev和prod创建副本,并相应地应用dev和prod设置。

2

我使用NAnt来构建和部署。我使用.config.template命名约定将我的.config文件制作成模板。我有一个名为“environment”的NAnt属性,我通过命令行调用来设置NAnt。在我的build.xml的顶部,我根据“environment”属性设置了“db.connectionstring”属性(如switch语句)。在构建任务中,我使用grep将“db.connectionstring”字符串推送到构建目录输出的模板中。这样,我只需要拨打:

nant -D:environment=dev 

这会得到一个dev特定的.config文件集。

如果你不喜欢的grep,按照此:

http://www.haidongji.com/2008/11/11/use-nant-to-replace-values-in-other-xml-config-files/

为XML文件里,才能工作。 Grep更通用。我实际上有基于部署环境的不同数据库名称,而grep让我可以根据环境将不同的数据库名称插入到SQL脚本中。

0

检查出的ConnectionStrings元素的configSource属性在web.config

应该可以很容易够

0

我好清楚,当前的环境是两台服务器,即

开发应用/数据库服务器
生产应用/数据库服务器

,你在想使它像这样

东西

应用服务器(开发+生产)
DB服务器(开发+生产)

如果是这样的话,我为您推荐隔离数据库和应用程序分成两个单独的服务器 - 从单个服务器环境中移动时,这是第一步,因为如果您需要群集多个数据库服务器,或者(更常见)在单个数据库服务器前负载平衡多个Web服务器以帮助应用程序性能,它可以在稍后轻松升级。

话虽如此,我并不建议像这样在同一台服务器上并排运行开发和生产环境。虽然它在财务上可能是合理的,但是隔离开发环境的目的是为了防止出现“开发错误”而不是生产过程,如果将一些错误代码推送到开发环境中,这样做可能会导致停机。

0

您可以将所有连接字符串放在web.config中,然后在应用程序的主要位置确定基于应用程序服务器使用哪一个字符串?

0

对于开发,请使用Web.Debug.config文件,对于生产,请使用Web.Release.config。每个可以定义它自己的单独连接字符串。