C# 每次在应用程序启动中更改配置时刷新页面时调用应用程序启动

C# 每次在应用程序启动中更改配置时刷新页面时调用应用程序启动,c#,asp.net,iis,servermanager,webconfigurationmanager,C#,Asp.net,Iis,Servermanager,Webconfigurationmanager,我只想在应用程序启动时更新web.config一次。为此,我想我可以在Global.asax中使用application_start方法。当向网站发出第一个请求时,应用程序启动通常只调用一次,但当我使用System.Web.Configuration.WebConfiguration Manager或Microsoft.Web.Administration.ServerManager更新Web.config时,每个http请求都会调用应用程序启动。WebConfiguration Manager

我只想在应用程序启动时更新web.config一次。为此,我想我可以在Global.asax中使用application_start方法。当向网站发出第一个请求时,应用程序启动通常只调用一次,但当我使用System.Web.Configuration.WebConfiguration Manager或Microsoft.Web.Administration.ServerManager更新Web.config时,每个http请求都会调用应用程序启动。WebConfiguration Manager的示例代码如下:

protected void Application_Start(object sender, EventArgs e)
    {
        Configuration config =WebConfigurationManager.OpenWebConfiguration(null);
        config.AppSettings.Settings.Remove("MyVariable");
        config.AppSettings.Settings.Add("MyVariable", "MyValue");
        config.Save(); 

        // Add event to event log to monitor when this method is called
        string sSource= "TryApplicationStart";
        string sLog= "Application";
        string sEvent= "Sample Event"; 

        if (!EventLog.SourceExists(sSource))
            EventLog.CreateEventSource(sSource, sLog);
        EventLog.WriteEntry(sSource, sEvent);
        EventLog.WriteEntry(sSource, sEvent,
            EventLogEntryType.Warning, 234);

    }
您可以创建一个空的asp.net web应用程序,将此代码添加到global.asax并将其托管在IIS中。然后刷新页面几次,并在事件日志中看到每次刷新都有注册的事件


当以这种方式更新配置文件时,为什么要为每个请求调用应用程序_start?在应用程序启动后,而不是在每次请求期间,如何更新web.config节?

更改ASP.NET应用程序的web.config文件会导致应用程序重新启动。这是设计上的——看起来您基本上创建了一个无限循环。这就是IIS中承载的web应用程序的行为设计。应用程序池检测到对web.config的更改,从而强制应用程序池回收。应用程序池回收后,应用程序将重新启动,调用application_start如果您希望在运行时存储某种配置,将其存储在内部线程安全结构或外部配置文件(如json配置文件)中,则不清楚为什么您希望在每次应用程序启动时仅更改web.config一次,但我建议你探索其他保存价值的方法(无论出于何种目的),因为目前的方法根本不起作用。我明白了。是的,它确实进入了一个无限循环。