关于ajax:是什么导致ASP.NET辅助进程被回收?

关于ajax:是什么导致ASP.NET辅助进程被回收?

What can cause an ASP.NET worker process to be recycled?

这是我当前的问题:

我猜我的问题(如下所述)是由ASP.NET辅助进程的回收引起的,按照下面的答案—我正在使用InProc会话存储,并且没有太大的移动机会由于其他存储类型的限制,所有会话对象都可以序列化。但是,我无法确定是什么原因使工作进程可以被回收,因为据我所知,app目录中的文件没有任何更改,以及选项在IIS中,这似乎意味着该进程将仅每1,740分钟进行一次回收,这比实际会话丢失的频率要少得多。因此,我的问题是,什么情况下可以导致ASP.NET辅助进程被回收?

这是我最初的问题:

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

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

我几乎肯定这不是会话超时-超时时间设置为一些荒谬的事情,发生这种情况所需的时间是可变的,但永远不会足够长以致于导致会话超时,并且常量Sys.Net.WebRequests应该刷新会话计时器。

那么,还会发生什么事情导致HTTP请求与ASP.NET会话失去联系?不幸的是,当我遇到这种情况时,我一直没有嗅探网络流量,否则我会检查ASP.NET会话cookie是否卡住了。


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...
...
<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的文章
发现ASP.NET具有新行为-例如,如果我们要删除的话
应用程序根目录的子目录,则ASP.NET 2.0将执行
重新启动AppDomain。

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

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

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


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

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

  • 编辑Web.Config
  • IIS重置
  • 等等
  • 如果会话状态对您的应用很重要,请使用SQL状态管理或ASP附带的状态服务器。 NET。

    干杯,

    RB。


    我的猜测是内存消耗-但是,将IIS设置为记录日志回收,您肯定会知道。


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

    这里有一篇文章比我能更好地解释它:ASP.NET 2.0未处理的异常问题

    引用:

    An unhandled exception in a running ASP.NET 2.0 application will usually terminate the W3WP.exe process, and leave you with a very cryptic EventLog entry something like this:

    "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未处理的异常导致基于ASP.NET的应用程序在.NET Framework 2.0中意外退出。


    工作进程可能正在循环。
    http://www.lattimore.id.au/2006/06/03/iis-dropping-sessions/


    推荐阅读