読者です 読者をやめる 読者になる 読者になる

リモーティングオブジェクトのリース期間延長

.net

今更ながら、.NET Remoting のエントリですw

Activator.CreateInstance や AppDomain.CreateInstanceAndUnwrap で生成したリモーティングオブジェクトには、「リース期間」が設定されています。オブジェクトの有効期限のようなものです。これが切れると、リモーティングオブジェクトのメソッドやプロパティを呼び出した時に RemotingException が発生します。

この問題を解決するためには、下記のようなコードで、リモーティングオブジェクトのリース期間を延長すればいいです。

public class FooObject : MarshalByRefObject
{
    // ...省略...

    // リース期間を延長する細工をほどこす
    public override object InitializeLifetimeService()
    {
        ILease lease = (ILease)base.InitializeLifetimeService();
        if (lease.CurrentState == LeaseState.Initial)
        {
            // リース期間を自動延長するスポンサーを登録
            lease.Register(new BarSponsor());
        }
        return lease;
    }
}

// リモーティングオブジェクトのリース期間を無期限にする
public class BarSponsor : MarshalByRefObject, ISponsor
{
    public BarSponsor()
    {
    }

    public TimeSpan Renewal(ILease lease)
    {
        return lease.InitialLeaseTime;
    }
}