为什么 AppDomain.GetLifetimeService returns 为空?

Why AppDomain.GetLifetimeService returns null?

我的应用程序使用 AppDomain 来加载 dll。 如果我超过 5 分钟没有从 AppDomain 调用方法,当我再次调用方法时,我会收到此错误:

Object '[...].rem' has been disconnected or does not exist at the server.

我阅读了很多关于 .NET Remoting Framework 和对象生命周期的文档(例如 http://msdn.microsoft.com/en-us/magazine/cc300474.aspx or http://www.codeproject.com/Articles/14791/NET-Remoting-with-an-easy-example,我知道这个问题与租约有关。也就是说,AppDomain 对象有租约,如果租约过期(默认情况下 5 分钟后),垃圾收集器将收集 AppDomainand,如果访问应用程序域的某些成员,则会抛出上面报告的异常。 因此,我正在尝试获取我的 AppDomain 的租约以便续订它:

// 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()" returns null!

我还看到 "AppDomain.InitializeLifetimeService()" 方法通过阻止创建租约来为 AppDomain 提供无限的生命周期。 我也试过这个,但我仍然收到上面报告的错误。

我需要做什么?

在此先感谢您的帮助!

您是否尝试过覆盖远程对象中的 GetLifetimeService-Method?请参阅下面的示例代码。

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

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