【问题标题】:setting Application Pool idletimeout to 0 side effects将应用程序池 idletimeout 设置为 0 副作用
【发布时间】:2012-07-05 01:27:57
【问题描述】:

我有一个在 IIS7 下运行的 Web 应用程序。我将全局变量存储在具有静态变量的类中。该类称为 SessionVariables ,例如,在其中我有以下内容:

public class SessionVariables
{
    public static string PreferedColor= "Black"; 
}

我在另一个页面 AccountSettings.aspx 中设置此变量,其中我有一个带有颜色名称的下拉列表。当用户选择一种颜色并点击保存时,这就是正在运行的代码。

   protected void btnSave_click(object sender, EventArgs e)
    {
    SessionVariables.PreferedColor= ddlColorNames.Text;
    }

如果应用程序空闲 5 分钟,则 PreferedColor 的静态值始终重置为默认值,因为应用程序池设置正在清除静态值,因为空闲超时(分钟)设置为 5。我将其更改为 0从 IIS 应用程序池中,问题消失了,应用程序池不再回收。我想知道此设置是否有任何副作用。

【问题讨论】:

    标签: asp.net application-pool static-variables


    【解决方案1】:

    已解决,web.config 中缺少配置,在 5 分钟后清除了静态变量 我添加了以下内容,一切顺利

    <sessionState mode="InProc" cookieless="false" timeout="480"/>
    

     <forms loginUrl="~/Login.aspx"  slidingExpiration="true" timeout="480" />
    

    【讨论】:

      【解决方案2】:

      这意味着即使在长时间没有连接之后,应用程序池进程也不会自行关闭。如果您不担心在低使用率期间清除资源,则将其关闭是完全可以的。

      如果发生其他回收,您仍然会清除变量,如果您想避免需要正确存储变量,而不仅仅是在内存中(可能在数据库中)。

      【讨论】:

      • 谢谢史蒂夫,这些变量是应用程序全局变量。您知道将它们从静态类中的静态变量更改为 Session[] 变量是否可以完成这项工作,或者它们仍然会被清除吗?不能将它们添加到数据库中。
      • 我不是 100%,但我相信你要做的不仅仅是一个普通的 Session 变量,你必须看这里:msdn.microsoft.com/en-us/library/ms178586.aspx 才能完全阅读它,但是基本上你需要 StateServer 或 SQLServer 类型的会话,所以它会在循环中持续存在。
      猜你喜欢
      • 2011-04-30
      • 2011-08-12
      • 1970-01-01
      • 2022-08-24
      • 2021-01-14
      • 2010-09-22
      • 2015-05-12
      • 1970-01-01
      • 2012-03-09
      相关资源
      最近更新 更多