【问题标题】:Issues on dynamically change and switching the connectionString in web Config关于在 web Config 中动态更改和切换 connectionString 的问题
【发布时间】:2012-08-14 11:04:52
【问题描述】:

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

塞纳里奥 我们为不同的客户提供了一个 asp.net Web 应用程序和不同的数据库。我正在尝试从一个公共数据库中切换特定的连接字符串值,在该数据库中我为连接字符串、特定的客户 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读取页面上的上述连接字符串。问题是Web配置文件正在更改,但在使用Response.Redirect调用另一个页面后会抛出异常。异常是“无法评估表达式,因为代码已优化或本机框架位于调用堆栈顶部“我可以意识到这是在跨线程环境中发生的事情。我的问题是

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

【问题讨论】:

  • 不要不断更改 web.config 文件,因为它会不断触发重新编译和撕裂应用程序域。我不知道您为什么要像现在这样布置它,但是如果您必须这样做,请打开与来自公共数据库的返回值的连接。
  • @RubbleFord -你是对的。你能告诉我实现上述场景的好方法是什么吗?

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


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多