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