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

4
我有一个Web项目,其中包含我的WebForms和WCF服务。 我遇到了一个问题,每隔一段时间我的应用程序似乎会重新启动,我失去了所有单例对象和会话值。 这似乎不是超时问题,而可能是某种内存泄漏。 我们可以使用应用程序一两分钟,然后突然失去所有内容。
我已经尝试监视目录以查找更改,但根本没有发现文件系统的更改。 我还在Application_Error中设置了断点,但没有错误被抛出。
我已经谷歌搜索了两天,试图解决这个问题。 应用程序是先前工作良好的一个项目的直接复制。 我注意到不同之处是上次我使用nHibernate作为后端,而这次我切换到使用Linq to SQL。 我注意到我没有正确处理DataContext,因为我在我的服务调用中定义了DataContext的实例并在返回值之前从未释放或将上下文设置回null,所以我想它可能没有关闭。 我尝试将datacontext存储在“repository”类中而不是存储在operationcontext中,并在Application_EndRequest上显式释放它。 但这仍然没有解决问题。
有人有任何建议或应该查看的地方吗?
** 更新 **:我相信我找到了我的问题。 我有一些使用EntitySet的对象,并且我正在使用可序列化的IList属性直接将这些对象序列化回来,其中linq查询返回列表。 当我尝试在返回数据之前显式处理我的datacontext时,现在我遇到了序列化这些EntitySet的问题,因为datacontext不再处于活动状态。 我将尝试将数据复制到具有常规列表而不是EntitySet的新空对象中,并查看是否允许我正确关闭我的datacontext并解决我的问题。

1
只是一个快速的问题:上述应用程序是唯一使用该应用程序池还是与另一个应用程序共享池? - Dimitri
我假设你已经看过这篇文章了:应用程序池意外回收的常见原因 - Roman
这是共享托管还是您自己的网络服务器? - Ladislav Mrnka
这种情况在Visual Studio开发中以及部署到服务器上都会发生。 - Josh Danko
我不知道。我只知道我失去了所有的单例对象和所有的会话变量。我猜测这是应用程序池回收的原因。 - Josh Danko
显示剩余4条评论
2个回答

1

更新确实是一个不同的问题,但你真的不应该尝试序列化ORM返回的东西——有很多潜在的噩梦。建立一些DTOs。


我已经编写了DTO,现在只有DTO被序列化输出。我也正确地关闭了DataContext。不幸的是问题仍然存在。 - Josh Danko

0
在IIS7控制台中,选择特定的应用程序池,并在左侧的动作窗格中选择"Recycling..."。这是一个向导,让您定义应用程序池如何重启以及如何将重启事件记录到事件日志(向导的第2页)。

抱歉,我应该让它更清楚。当我在Visual Studio中调试开发Web服务器时,也会出现这种情况。这不是IIS中的设置。我相信这是我的web.config中的设置或可能是我的代码问题。 - Josh Danko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接