C# 为什么AppDomain.GetLifetimeService返回null?
我的应用程序使用AppDomain加载dll。 如果我没有从AppDomain调用方法的时间超过5分钟,当我再次调用方法时,会出现以下错误: 反对 “[…]雷姆” 已断开连接或服务器上不存在 我阅读了大量文档(例如,或关于.NET远程处理框架和对象生存期的文档),我知道此问题与租约有关。即,AppDomain对象有租约,如果租约到期(默认情况下,5分钟后)垃圾收集器将收集AppDomainand,如果访问了应用程序域的某个成员,则会引发上面报告的异常。 因此,我试图获得AppDomain的租约以便续约: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的租约以
// 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我希望您无限的生存期;-)很高兴我能提供帮助。你也可以接受这个答案;-)