Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# web配置中动态更改和切换connectionString的问题_C#_Asp.net_Web Applications_Web Config_Page Lifecycle - Fatal编程技术网

C# web配置中动态更改和切换connectionString的问题

C# web配置中动态更改和切换connectionString的问题,c#,asp.net,web-applications,web-config,page-lifecycle,C#,Asp.net,Web Applications,Web Config,Page Lifecycle,我试图在运行时为web应用程序切换不同的数据库 Senario 我们有一个asp.net web应用程序和不同客户的不同数据库。我正在尝试从一个公共数据库中切换特定的连接字符串值,在该数据库中我保留了连接字符串的映射表,特定的客户id和密码。成功登录后,我将从公共数据库中创建一个连接字符串,并通过在运行时替换选定的连接字符串来编辑web.config文件连接字符串部分。 我通过向登录事件添加以下代码来完成此操作 conectionString = cString;

我试图在运行时为web应用程序切换不同的数据库

Senario 我们有一个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配置文件正在更改,但在使用
响应调用另一个页面后。重定向
将引发异常。异常为“无法计算表达式,因为代码已优化或调用堆栈顶部有本机框架”“我意识到这是在跨线程环境中发生的。我的问题是

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

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

1) 我不知道确切的原因,但这是由于应用程序运行时代码被修改而导致的

2) 基于我的搜索,当IIS服务器启动时,应用程序开始读取WEB配置文件。因此,需要在WEB配置中修改哪些值,需要重新启动IIS服务器以将其加载到内存中。我们可以动态修改连接字符串,但应用程序仍将在以前的连接字符串上运行。因此,我们需要重新启动IIS以加载较新的IIS

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

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


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

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