ASP.NET应用程序池回收问题

时间:2011-05-09 21:17:24

标签: asp.net wcf application-pool recycle

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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