2010-09-22 48 views
0

如何在Singleton WCF服务中处理对象?我正在使用实体框架(3.5),并返回一堆自定义POCO对象到客户端。该服务需要处于活动状态,因为它提供了跨客户端通信,因此使用了双工绑定。我想将所有创建的POCO对象序列化到客户端。 因为会话和服务仍然存在,所以看起来Framework并没有在这些对象上做任何垃圾收集,随着时间的推移,服务崩溃,像“错误的内存”(大约2GB之后)。如何在Singleton WCF服务中处理对象

我不认为可以在return语句之前调用dispose,因为那时对象还没有被序列化。

请提出一个解决方案。

在此先感谢。

回答

1

首先,不要使用单身服务,为什么,以及你的问题是答案。 正如我所看到的那样,您的服务应该是托管的每个调用实例,并且回调通道应该在另一个类或服务类中的静态成员上进行管理。

其次,尝试看看您是否继续引用您返回给客户端的poco,导致GC清理未引用的内容。所以,如果你发现引用只是指定那些成员为空,GC将完成剩下的工作(你无需担心方法变量)。

1

我觉得你在这里错了;如果你的对象是POCO,他们是否实现了IDisposable(不知道你为什么会选择POCO类)。我的猜测是你还有别的东西在咀嚼你的记忆。可能你的单身服务活得太长,收集太多废话;你可能想看看不同的服务模型。也许每个会话的实例或类似的东西。

然而,你可以做的一件事情就是不要直接序列化你的POCO对象,而是创建非常简单的'消息传递'类,它们只有你想序列化和发送这些属性。您可以将属性复制到消息对象中,然后立即处理数据库对象。

+0

POCO ..是的,他们是简单的消息类,只有属性。但其中一些只是对象。你是正确的..服务活得太久,收集很多废话..现在我需要解决.. ..实现了这个问题..今天..只需两个星期prod发布..经过一年的发展:) – Bhuvan 2010-09-22 22:02:29