关于在Web Config中动态更改和切换connectionString的问题

时间:2012-08-14 11:04:52

标签: c# asp.net web-applications web-config page-lifecycle

我正在尝试在运行时为Web应用程序切换不同的数据库。

塞纳里奥 我们有一个asp.net Web应用程序和不同客户的不同数据库。我试图从一个公共数据库切换特定的连接字符串值,我保留连接字符串,特定客户ID和密码的映射表。成功的login后我正在从公共数据库中获取连接字符串,并通过在运行时替换选定的连接字符串来编辑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在页面上方读取连接字符串。问题是Web配置文件正在更改但在使用Response.Redirect调用另一个页面后将抛出异常.Exception为“无法评估表达式,因为代码已优化或本机框架位于调用堆栈之上“我可以意识到这是在跨线程环境中发生的事情。我的问题是

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

1 个答案:

答案 0 :(得分:1)

我想知道为什么这个问题似乎仍然没有答案。我已经找到了一些自我答案。这可能是错的,但有些是如何给我一些意义。我认为以下是我的知识水平可接受的。

1)我不知道确切的原因,但这是因为代码在运行应用程序时被修改而发生的事情

2)基于我的搜索,当IIS服务器启动时,应用程序开始读取WEB Config文件。那么在WEB Config中要修改的值,需要重新启动IIS服务器才能将它们加载到内存中。可以动态修改连接字符串但仍然可以在先前的连接字符串上运行应用程序。所以我们需要重新启动IIS以加载更新的连接字符串。

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

3)我使用了一个公共数据库,其中我有几个数据库的不同连接字符串的身份验证详细信息.WeB配置有上面主数据库的连接字符串。如果用户提供他的身份验证详细信息,它将选择他的连接字符串并将其作为新连接字符串加载。因此剩余的进程将基于该连接字符串。

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