2010-09-22 40 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