操作:开始执行了如下代码的 LoadAssembly(),创建了一个对象 RemoteLoader。当过一会(大概20分钟)再执行close()方法,到rl.close();时 ,就出错!错误如下:错误:System.Runtime.Remoting.RemotingException
错误信息:对象 </74a0887f_c6a2_4c8d_a08e_eb789ff781a5/p8fqpqOOoWU_iDd3k2JqE2ER_3.rem> 已经断开连接或不在服务器上。诚请各位指点!代码:
public AppDomain domain;
public string mid;
public string entryName;
string[] entryParms;
private RemoteLoader rl = null;private void SetRemoteLoaderObject()
{
object[] parms = {this.domain,"Stub"};
BindingFlags bindings = BindingFlags.CreateInstance |
BindingFlags.Instance | BindingFlags.Public;
try
{
string dllName = domain.BaseDirectory + "Stub.dll";
rl = (iCSP.Stub.RemoteLoader)domain.CreateInstanceFromAndUnwrap(
dllName,"Stub.RemoteLoader",true,bindings,
null,parms,null,null,null); this.subDomainStatus = false;
}
catch (Exception ex)
{
throw ex;
}
}public void LoadAssembly()
{
try
{
SetRemoteLoaderObject();
rl.LoadAssembly(this.entryName, this.entryParms);
}
catch(Exception ex)
{
throw new AssemblyLoadFailureException(ex.Message);
}
}public void close()
{    
try
{ rl.close();
this.dispose(true);
}
catch(Exception e)
{
//
        throw e;
}
}

解决方案 »

  1.   

    AppDomain.InitializeLifetimeService 通过防止创建租约来给予 AppDomain 无限生存期。
      

  2.   

    谢谢各位,这个问题已解决。方法如下:public class RemoteLoader:MarshalByRefObject
    { public RemoteLoader()
    {
    } #region 重构 MarshalByRefObject 成员 /// <summary>
    /// 
    /// </summary>
    /// <returns></returns>
    public override Object InitializeLifetimeService()
    {
    ILease lease = (ILease)base.InitializeLifetimeService();
    if (lease.CurrentState == LeaseState.Initial)
    {
    lease.InitialLeaseTime = TimeSpan.Zero;
    }
    return lease;
    } #endregion}