4

这是我目前的问题:

我猜我的问题(如下所述)是由 ASP.NET 工作进程被回收引起的,根据下面的答案 - 我正在使用 InProc 会话存储,并且由于限制,我看不到太多移动的机会对于其他类型的存储,所有会话对象都是可序列化的。但是,我无法弄清楚是什么让工作进程像我看到的那样经常被回收——据我所知,app 目录中的文件没有任何变化,而且 IIS 中的选项似乎意味着该进程只会每 1,740 分钟回收一次——这比实际会话丢失的频率要低得多。所以,我现在的问题是,有哪些不同的情况会导致 ASP.NET 工作进程被回收?

这是我原来的问题:

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

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

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

那么,还有什么可能导致 HTTP 请求与 ASP.NET 会话失去联系呢?不幸的是,当这种情况发生在我身上时,我并没有嗅探网络流量,否则我会检查 ASP.NET 会话 cookie 是否存在。

4

5 回答 5

3

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

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

  1. 编辑 Web.Config
  2. IIS 重置
  3. 等等

如果会话状态对您的应用程序很重要,则使用 SQL 状态管理或 ASP 附带的状态服务器。网。

干杯,

RB。

于 2008-09-18T16:15:41.033 回答
3

当我们将 AnkerEx 应用程序迁移到新服务器时,我们遇到了 Session 问题。新服务器具有 Microsoft Windows Server 2008 作为操作系统和 Microsoft Internet Information Services 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的文章中,我发现 ASP.NET 具有新行为 - 如果我们要删除,例如子应用程序根目录的目录,然后 ASP.NET 2.0 将重新启动 AppDomain。

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

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

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

于 2008-09-21T21:53:51.153 回答
1

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

于 2008-09-18T16:15:25.790 回答
1

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

这是一篇比我能解释得更好的文章:ASP.NET 2.0 Unhandled Exception Issues

引用:

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

“事件类型 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 知识库文章:KB911816 Unhandled exceptions cause ASP.NET-based applications to unexpectedly quit in the .NET Framework 2.0

于 2008-09-18T16:21:38.100 回答
1

我的猜测是内存消耗——但是,设置IIS 来记录回收,你肯定会知道。

于 2008-09-19T15:29:01.190 回答