Почему Домене.GetLifetimeService возвращает null?


Мое приложение использует AppDomain для загрузки dll. Если я не вызываю методы из домена приложения более 5 минут, то при повторном вызове метода я получаю следующую ошибку:

Объект "[...].Рем' был отключен или не существует на сервере.

Я прочитал много документации (например, http://msdn.microsoft.com/en-us/magazine/cc300474.aspx или http://www.codeproject.com/Articles/14791/NET-Remoting-with-an-easy-example относительно .NET Remoting Framework и objects lifetime, и я знаю, что эта проблема связана с арендой. А именно, объекты AppDomain имеют аренду, и если срок аренды истекает (по умолчанию через 5 минут), сборщик мусора соберет объект AppDomainand, и при обращении к какому-либо члену домена приложения будет выдано исключение, описанное выше. Таким образом, я пытаюсь получить аренду моего домена приложения, чтобы продлить его:

// Release the created AppDomain
if (myDomain != null)
    AppDomain.Unload(myDomain);

// Create a new AppDomain
domainInfo = new AppDomainSetup();
domainInfo.ApplicationBase = "c:myDll.dll";
domainInfo.ApplicationName = "myExternalApp";

myDomain = AppDomain.CreateDomain("myAppName", null, domainInfo);

myWrapper = (IDataManager) myDomain.CreateInstanceAndUnwrap("MYWrapper","MYWrapper.MyFunctions");

ILease lease = (ILease)myDomain.GetLifetimeService(); //but lease is null !!!!!

Проблема в том, что "GetLifetimeService()" возвращает ноль!

Я также видел, что метод "AppDomain.InitializeLifetimeService () " дает домену приложений бесконечное время жизни, предотвращая создание аренды. Я попробовал также это, но я все еще получаю сообщение об ошибке выше.

Что мне нужно сделать?

Заранее спасибо за любую помощь!

1 3

1 ответ:

Пытались ли вы переопределить GetLifetimeService-метод в удаленном объекте? Смотрите пример кода ниже.

public class MyDataManager : MarshalByRefObject, IDataManager
{
    {...}

    public override object InitializeLifetimeService()
    {
        return null;
    }
}