2011-10-27 31 views
0

使用COM +連接到數據庫ASP.NET COM +處置異常

我們有這個結構我們的ASP.NET應用程序:

  1. 基類:

    進口的System.EnterpriseServices

    Public Class Base Inherits ServicedComponent

  2. 個類:

    Public Class Member Inherits Base 
    

    「Propreties 。 。 。

    'Methods 
    Public Sub SetMember(ByVal SelectedQueue As String) 
         ... 
    End Sub 
    

在一個aspx頁面,我們搜索的成員,並設置細節:

Dim newMember As Member = New Member 
newMember.SetMember(MemberNumber) 
Session("SelectedMember") = newMember 

然後我們處理newMember:

If Not newMember Is Nothing Then 
       newMember.Dispose() 
End If 

但whenver我們訪問會話我們有個例外:

If Not Session("SelectedMember") Is Nothing Then 
       'Something 
      Else 
       'Something else 
      End If 

例外情況是: 無法訪問處置的對象。對象名稱:'ServicedComponent'。

如何處置對象但保持會話有效?

+0

您的組件是進程內還是進程外(可能正在進行)?你爲什麼要「燉」這個物體,但保持它的會話? –

回答

1

我可以看到你做錯了什麼,但不能清楚什麼是正確的。你所說的邏輯是:

  1. 獲取對象。
  2. 存儲對象。
  3. 清理對象,使其無效。
  4. 檢索對象。
  5. 使用對象。

在5之前3是沒有意義的。

如果快速獲取對象,則應該在每個頁面上都這樣做。 (通常人們高估了這個成本)。

如果對象獲取緩慢,並且長期存儲是有意義的,則不需要清理。 Dispose()實際上在這裏做什麼?隨着它獲取和釋放成員使用的資源。

我懷疑第一個是去這裏的人,但那大多是猜測。

當你談論數據庫時,我還會擔心,你的對象是否保存了數據庫連接?如果是這樣,並且可以合併,那麼您應該儘快釋放這些連接,而不是堅持這些連接。