2010-08-13 41 views
0

在WCF之前的.NET(C#)Web服務中,我擁有一個昂貴的IDisposable資源,我持有一個靜態(實際上是ThreadStatic)引用。 (它在內部持有一個SqlConnection。)我應該如何確保在應用程序池刷新時處理這個問題,我是否應該簡單地禁止FxCop警告而不擔心它,還是有第三種選擇?在Web服務中處理靜態資源

最初服務通過使用塊打開每個請求上的連接,但該設計由於「連接資源問題」而被拒絕。

回答

1

由於連接資源問題,此設計將被拒絕。如果你以前遇到過問題,你將再次擁有它們,因爲現在你將使用更多的SqlServer連接(如果它是線程靜態的,那麼每個線程將有一個SqlServer,更重要的是,一個底層的真實連接,即使它沒有使用連接並且將返回到池的底層連接)。

+0

非常好的一點。我沒有選擇新的設計。你會建議什麼? – TrueWill 2010-08-13 17:38:01

+1

您需要重新檢查連接資源問題,並查看實際問題。通常情況下,最好的模式是打開連接,執行操作,然後關閉它,或者通過連接上的使用塊,或者 - 如果您要返回數據讀取器以便可以高效地迭代,則使用中的數據讀取器使用CloseConnection選項創建的塊,因此它是處理觸發器的連接處置。這樣,「真正的」連接即時返回到池。你的改變讓事情變得更糟,因爲永遠不會退回。通常模式出錯了...... – 2010-08-15 14:06:50

+0

......創建數據讀取器的連接(因此不在使用中)並將數據讀取器放入使用狀態之間發生錯誤了嗎?這種情況可能會導致泄漏(我使用一個包裝類來處理連接,但是當它成功創建一個包含閉合選項的數據讀取器時,將「停止擁有」連接,因爲它現在是讀者關閉它錯誤的另一個來源是,如果你在interator塊的datareader上使用''using',無論是作爲錯誤還是有意的,都不會進入使用塊,因爲第一個... – 2010-08-15 14:10:09