ASP.NET COM + избавиться от исключения - PullRequest
0 голосов
/ 27 октября 2011

наше приложение ASP.NET использует COM + для подключения к базе данных

у нас есть такая структура:

  1. Базовый класс:

    Система импорта.EnterpriseServices

    Базовые наследуемые объекты общего класса ServicedComponent

  2. Дочерний класс:

     Public Class Member Inherits Base
    

    'Свойства.,.

    '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

но всякий раз, когда мы получаем доступ к сеансу, мы получаем исключение:

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

исключение: невозможно получить доступ к удаленному объекту.Имя объекта: 'ServicedComponent'.

Как я могу удалить объект, но сохранить сессию действительной?

1 Ответ

1 голос
/ 27 октября 2011

Я вижу, что ты делаешь неправильно, но не могу понять, что было бы правильно. Ваша логика как заявлено:

  1. Получить объект.
  2. Хранить объект.
  3. Очистить объект, сделав его бесполезным.
  4. Получить объект.
  5. Использовать объект.

Не имеет смысла иметь 3 до 5.

Если объект можно быстро получить, вы должны просто сделать это на каждой странице. (Часто люди переоценивают стоимость этого).

Если объект получается медленно и имеет смысл хранить его в течение длительного периода времени, то его не нужно очищать. Что на самом деле здесь делает Dispose ()? При этом получение и высвобождение ресурсов, используемых членами по мере необходимости.

Я подозреваю, что первым здесь можно воспользоваться, но в основном это предположение.

Меня также будет беспокоить, когда вы говорите о базе данных, поддерживает ли ваш объект соединение с базой данных? Если это так, и пул доступен, то вы должны как можно быстрее разъединять эти соединения, а не держаться за них.

...