4

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

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

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

1 回答 1

1

我想知道为什么这个问题似乎仍然没有答案。好吧,我已经找到了一些答案。这可能是错误的,但它们如何赋予我一些意义。我认为以下内容对于我的知识水平是可以接受的。

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

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

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

3)我使用了一个通用数据库,其中我有几个数据库的不同连接字符串的身份验证详细信息。Web 配置具有上述主数据库的连接字符串。如果用户提供他的身份验证详细信息,它将选择他的连接字符串并加载它作为新的连接字符串。所以剩下的过程将基于该连接字符串。

上述答案的任何新论点都是非常可观的。我需要其他开发人员的更正,因为我非常渴望学习。

于 2012-10-15T20:35:41.700 回答