2012-08-14 46 views
4

我试图在运行时为Web应用程序切换不同的数据库。关于动态更改和切换web配置中的connectionString的问题

塞纳里奥 我们有一个asp.net web应用程序,并针对不同的customers.I不同的数据库正在试图从一个共同的数据库切换特定的连接字符串值,其中我保持的映射表连接字符串,特定客户ID和密码。成功后,我从公共数据库获取连接字符串,并在运行时通过替换所选连接字符串来编辑web.config文件连接字符串部分。 我被添加以下代码登录事件

   conectionString = cString; 
       Configuration openWebConfiguration = WebConfigurationManager.OpenWebConfiguration("~"); 
       ConnectionStringsSection sections = openWebConfiguration.GetSection("connectionStrings") as ConnectionStringsSection; 
       if (sections != null) 
       { 
        sections.ConnectionStrings["ConnectionStringName"].ConnectionString = conectionString; 
        ConfigurationManager.RefreshSection("ConnectionStringName"); 
        openWebConfiguration.Save(); 

       } 

我正在使用ConfigurationManager .problem上述连接字符串阅读网页上这样做是网络配置文件正在发生变化,但使用Response.Redirect将引发调用另一个页面后一个例外是.Exception“无法因为代码被优化或天然帧是在调用堆栈的顶部以评价表达”我可以意识到这是一件发生交叉螺纹environment.My问题是

  • 上面的确切原因是什么例外?
  • 哪个页面的Asp.net生命周期从web配置文件中读取设置?
  • 我可以实现上述场景的正确方法是什么?
+1

不要继续更改web.config文件,因为它会继续触发重新编译和撕裂应用程序域。 我不知道你为什么要这样做,但如果你只需要,用公用数据库的返回值打开一个连接。 – RubbleFord 2012-08-14 11:18:34

+0

@RubbleFord - 你是对的。你能告诉我什么是实现上述场景的好方法吗? – Thabo 2012-08-14 12:10:35

回答

1

我很奇怪,为什么这个问题似乎仍然unanswered.OK我已经找到了一些answermy self.It可能是错的,但有些他们是如何给予一定的意义,我,我认为以下是我的知识水平是可接受的。

1)我不知道确切的原因,但是这是事情发生的,因为代码,同时应用程序运行基于我的搜索WEB

2)修改配置文件,启动应用程序时,阅读IIS服务器启动。因此,在WEB配置中需要修改的值需要重新启动IIS服务器以将其加载到内存中。我们可以动态修改连接字符串,但应用程序仍然会在上一个连接字符串上运行。所以我们需要重新启动IIS来加载新的。

注意:修改现有连接字符串不同于向WEB配置添加新连接字符串。

3)我已经使用一个共同的数据库,其中i有用于几个database.WeB配置不同不同的连接字符串认证细节具有用于上述主连接字符串database.If一个用户给出他的认证细节将选择他连接字符串并将其加载为新的连接字符串。因此剩余的进程将基于该连接字符串。

上述答案的任何新论据都非常值得一读。我需要其他开发者的更正,因为我非常渴望学习。