【问题标题】:ASP.NET Application Pool Recycling IssueASP.NET 应用程序池回收问题
【发布时间】:2011-08-22 00:09:20
【问题描述】:

我有一个 Web 项目设置,其中包含我的 WebForms 和 WCF 服务。我遇到了一个问题,我的应用程序似乎经常回收,并且我丢失了所有单例对象和会话值。这似乎不是超时问题,但可能是某种内存泄漏。我们可以使用该应用程序一分钟左右,然后它就失去了一切。

我已尝试监视目录的更改,但根本没有发现文件系统的更改。我还在 Application_Error 中设置了一个断点,并且没有抛出任何错误。

我已经在谷歌上搜索了两天试图解决这个问题。该应用程序是以前运行良好的项目的直接复制。我注意到不同的一件事是我的最后一个项目我使用 nHibernate 作为后端,而这个项目我切换到使用 Linq to SQL。我注意到我没有正确处理 DataContext,因为我在我的服务调用中调暗了 DataContext 的实例并在将上下文设置为空之前返回了一个值,所以我认为它可能没有关闭。我尝试不将数据上下文存储在我的“存储库”类中,而是将其存储在操作上下文中,并在 Application_EndRequest 上显式处理它。这仍然没有解决问题。

有人有什么建议或我应该看的地方吗?

** 更新**:我相信我找到了我的问题。我有使用 EntitySet 的对象,并且我正在使用可序列化的 IList 属性直接将这些对象序列化,并使用返回列表的 linq 查询。当我试图在返回数据之前显式处理我的数据上下文时,我现在遇到了序列化这些 EntitySet 的问题,因为数据上下文不再处于活动状态。我将尝试使用常规列表而不是 EntitySet 将数据复制到一个新的空白对象中,看看这是否能让我正确关闭我的数据上下文并解决我的问题。

【问题讨论】:

  • 只是一个简单的问题:上述应用程序是只有一个使用该应用程序池还是与另一个应用程序共享池?
  • 是共享主机还是你自己的网络服务器?
  • 未共享。这发生在 Visual Studio 的开发中以及部署到服务器上。
  • 您确定问题是应用程序池正在被回收吗?你怎么知道的?

标签: asp.net wcf application-pool recycle


【解决方案1】:

更新确实是一个不同的问题,但你真的不应该尝试序列化来自 ORM 的东西——很多潜在的噩梦。为自己构建一些 DTO。

【讨论】:

  • 我已经编写了 DTO,现在只有 DTO 被序列化了。我也正确关闭了 DataContext。不幸的是,问题仍然存在。
【解决方案2】:

在 IIS7 控制台中,选择特定的应用程序池,然后在左侧的操作窗格中选择“回收...”。它是一个向导,可让您定义应用程序池如何回收,以及如何将回收事件记录到事件日志中(向导的第 2 页)。

【讨论】:

  • 对不起,我应该说清楚的。当我在 Visual Studio 中调试它时,它也会发生在开发 Web 服务器上。它不是 IIS 中的设置。我很确定这是我的 web.config 中的一个设置,或者可能是我的代码的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
  • 2020-05-23
  • 2011-06-12
  • 2015-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多