什么可以导致ASP.NET工作进程被回收?

时间:2008-09-18 16:14:18

标签: asp.net ajax session

以下是我目前的问题:

我猜我的问题(如下所述)是由ASP.NET工作进程被回收引起的,根据下面的答案 - 我使用的是InProc会话存储,并且没有太大的机会离开,到期限制所有会话对象可序列化的其他类型的存储。但是,我无法弄清楚什么会使工作进程像我看到的那样经常被回收 - 据我所知,在app目录中没有任何文件更改,并且IIS中的选项似乎暗示该过程每1,740分钟只能回收一次 - 这比实际的会话损失要少得多。那么,我现在的问题是,哪些不同的案例可以导致ASP.NET工作进程被回收?

以下是我原来的问题:

我的ASP.NET Web应用程序中出现了一个难以重现的问题。该应用程序有一个主要的.aspx页面,它被加载并初始化了许多会话变量。此页面使用ASP.NET Ajax Sys.Net.WebRequest类重复访问另一个.aspx页面,该页面使用会话变量进行数据库查询并更新主页面(主页面永远不会被重新请求)。

有时候,在使用该页面一段时间后,导致成功的HTTP请求,其中在主页面中创建的会话正确地转移到子页面,其中一个请求似乎导致创建一个新的ASP.NET会话 - 所有会话变量都丢失(导致我的代码中抛出异常),并在动态请求的页面中报告新的会话ID。这意味着突然,主页面与服务器断开连接 - 就服务器而言,用户不再登录。

我几乎是肯定的,它不是会话超时 - 超时时间设置为荒谬,发生这种情况所需的时间是可变的,但永远不会导致会话超时,< em>和常量Sys.Net.WebRequests 应该刷新会话计时器。

那么,还有什么可能会导致HTTP请求失去与ASP.NET会话的联系?遗憾的是,当我遇到这种情况时,我还没有嗅过网络流量,或者我会检查ASP.NET会话cookie是否已经卡住了。

5 个答案:

答案 0 :(得分:3)

一种解决方案是使用StateServer,而不是InProc会话管理。

很多事情都可能导致会话状态丢失:

  1. 编辑Web.Config
  2. IIS重置
  3. 如果会话状态对您的应用程序很重要,则使用SQL状态管理或ASP附带的State Server。 NET。

    干杯,

    RB。

答案 1 :(得分:3)

当我们将AnkerEx应用程序迁移到。时,我们遇到了Session问题 新服务器。新服务器将Microsoft Windows Server 2008作为操作系统 和Microsoft Internet信息服务7.还在服务器中安装 .NET Framework版本1.0.3705,1.1.4322,2.0.50727,3.0和3.5。 为了解决这个问题,我已经完成了健康监测 应用程序在ASP.NET 2.0中与生命周期相关的事件。我已经添加到web.config:

...
...
<system.web>
...
...
    <healthMonitoring>
      <rules>
        <add name="Application Events"
            eventName="Application Lifetime Events"
            provider="EventLogProvider"
            profile="Default"
            minInterval="00:01:00" />
      </rules>
    </healthMonitoring>
...
...

检查AppDomain回收是有帮助的。我们可以在事件查看器中看到它。 指向更多详细信息的链接是http://blogs.msdn.com/rahulso/archive/2006/04/13/575715.aspx

在我完成添加到web.config后,事件查看器向我展示了我的 每次我点击几乎任何链接时,应用程序都会重新启动 应用。 来自http://blogs.msdn.com/toddca/archive/2005/12/01/499144.aspx i的文章 发现ASP.NET有新的行为 - 例如,如果我们要删除它 应用程序根目录的子目录,然后ASP.NET 2.0将执行 重启AppDomain。

问题在于我在web.config中有指令:

...
<compilation debug="true" tempDirectory="c:\AnkerEx\Temporary ASP.NET files">
...

即。 ASP.NET在我的应用程序根文件夹中编译了aspx页面。 我认为他创建了文件夹,可能并且确实删除了其中的一些文件夹。我删除了 tempDirectory指令和应用程序开始稳定工作。

答案 2 :(得分:1)

答案 3 :(得分:1)

可能是由后台线程中的未处理异常引起的。它可能导致您的ASP.NET辅助进程终止。新流程很快就会启动,因此您实际上并未注意到它,但会丢失所有会话。

这篇文章比我更好地解释了它:ASP.NET 2.0 Unhandled Exception Issues

报价:

  

正在运行的ASP.NET 2.0应用程序中的未处理异常通常会终止W3WP.exe进程,并为您留下一个非常神秘的EventLog条目,如下所示:

     

“EventType clr20r3,P1 w3wp.exe,P2 6.0.3790.1830,P3 42435be1,P4 app_web_ncsnb2-n,P5 0.0.0.0,P6 440a4082,P7 5,P8 1,P9 system.nullreferenceexception,P10 NIL。”

以下是Microsoft KB文章,解释了同一问题:KB911816 Unhandled exceptions cause ASP.NET-based applications to unexpectedly quit in the .NET Framework 2.0

答案 4 :(得分:1)

我的猜测是内存消耗 - 但是,设置IIS to log recycles你肯定会知道。