2011-05-09 127 views
4

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

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

我一直在谷歌搜寻两天试图解决这个问题。该应用程序是以前正在工作的项目的直接重复。我注意到的一点是不同的是,我使用nHibernate作为后端,并且我转而使用Linq转换为SQL。我注意到我没有正确处理DataContext,因为我在我的服务调用中调用了DataContext的实例,并在处理或设置上下文之前返回一个值,所以我认为它可能没有关闭。我试着不是将datacontext存储在我的“repository”类中,而是将它存储在operationcontext中,并将它显式地放置在Application_EndRequest上。这仍然没有解决这个问题。

任何人有任何建议或地方我应该看看?

**更新**:我相信我发现我的问题。我有使用EntitySet的对象,我直接使用序列化的IList属性将这些对象序列化,返回列表。当我试图显式处理我的datacontext在返回数据之前,我正在运行的问题序列化这些EntitySet的,因为datacontext不再是活动的。我将尝试将数据复制到具有常规列表而不是EntitySet的新空白对象中,并查看是否允许我正确关闭数据环境并解决问题。

+1

只是一个简单的问题:上面的应用程序只有一个使用该应用程序池,还是与另一个应用程序共享池? – Dimitri 2011-05-09 21:20:55

+0

我假设你已经遇到过这个问题:[你的应用程序池可能会意外回收的常见原因](http://blogs.msdn.com/b/johan/archive/2007/05/16/common-reasons-why -your-application-pool-may-unexpectedly-recycle.aspx) – R0MANARMY 2011-05-09 21:57:23

+0

它是共享主机还是你自己的网络服务器? – 2011-05-10 07:27:02

回答

0

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

+0

对不起,我应该说清楚。当我在Visual Studio中调试它时,它也发生在开发Web服务器上。它不是IIS中的设置。我很确定它是我的web.config中的一个设置,或者可能是我的代码的问题。 – 2011-05-10 18:16:09

1

更新实际上是一个不同的问题,但你真的不应该尝试序列化来自ORM的东西 - 很多潜在的噩梦。建立自己的一些DTOs。

+0

我写了DTO的,现在只有DTO的序列化了。我也正确地关闭DataContext。问题仍然不幸。 – 2011-05-13 19:14:05

相关问题