为什么 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;
}
}
我的应用程序使用 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;
}
}