Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么AppDomain.GetLifetimeService返回null?_C#_.net_Appdomain_.net Remoting_Object Lifetime - Fatal编程技术网

C# 为什么AppDomain.GetLifetimeService返回null?

C# 为什么AppDomain.GetLifetimeService返回null?,c#,.net,appdomain,.net-remoting,object-lifetime,C#,.net,Appdomain,.net Remoting,Object Lifetime,我的应用程序使用AppDomain加载dll。 如果我没有从AppDomain调用方法的时间超过5分钟,当我再次调用方法时,会出现以下错误: 反对 “[…]雷姆” 已断开连接或服务器上不存在 我阅读了大量文档(例如,或关于.NET远程处理框架和对象生存期的文档),我知道此问题与租约有关。即,AppDomain对象有租约,如果租约到期(默认情况下,5分钟后)垃圾收集器将收集AppDomainand,如果访问了应用程序域的某个成员,则会引发上面报告的异常。 因此,我试图获得AppDomain的租约以

我的应用程序使用AppDomain加载dll。 如果我没有从AppDomain调用方法的时间超过5分钟,当我再次调用方法时,会出现以下错误:

反对 “[…]雷姆” 已断开连接或服务器上不存在

我阅读了大量文档(例如,或关于.NET远程处理框架和对象生存期的文档),我知道此问题与租约有关。即,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()”返回null

我还看到方法“AppDomain.InitializeLifetimeService()”通过阻止创建租约,为AppDomain提供了无限的生存期。
我也尝试了这个,但我仍然得到上面报告的错误

我需要做什么


提前感谢您的帮助!

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

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

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

尝试调用
AppDomain.InitializeLifetimeService
。我也尝试过,但仍然出现错误。嗯,不,AppDomains不会自动卸载。在其中创建的对象会自动卸载,您必须管理该对象的生存期。但为什么GetLifetimeService()不返回租赁对象ILease(如中所述)?根据消息来源,它使用的是
RemotingService.GetLifetimeService
,如果传递给它的对象为null,它将返回null。可能是相关的。谢谢!!你的建议解决了问题!问题是,实际上我在AppDomain上调用了InitializeLifetimeService,它的行为与同一方法完全不同当我使用myDomain.CreateInstanceAndUnwrap(…)创建myWrapper时,将调用MarshalByRefObject.MarshalByRefObject.InitializeLifetimeService()的od但是它并没有赋予包装器无限的生存期。正如您所建议的,通过重写我的类MYWrapper.MyFunctions中的MarshalByRefObject.InitializeLifetimeService,它赋予MYWrapper无限的生存期….@Scoregraphic我希望您无限的生存期;-)很高兴我能提供帮助。你也可以接受这个答案;-)