5

MarshalByRefObjectおよびを継承するオブジェクトを作成しましたISponsor。私の実装ではISponsor、オブジェクトを更新する期間を示すためにタイムスパンを返すだけです。

オブジェクトに渡される参照InitializeLifetimeService()を取得するために呼び出すと、これまでに見た例からは使用されていないように見えます。ILeaseISponsor

ISponsor実際に参照を使用せずにTimeSpanを返すようILeaseです。しかし、リモーティングが関係しているので、ここではもっと多くのことが起こっていると確信しています。

特にオブジェクトの存続期間の更新に関して、どのようISponsorに機能しますか?ILease

4

2 に答える 2

5

リモートオブジェクトのリースを延長するクライアントアプリでは、通常、次の呼び出しによってオブジェクトのILeaseインターフェイスを取得します。

ILease lease = (ILease)RemotingServices.GetLifetimeService( remoteObject );

次に、カスタムスポンサーオブジェクトを渡します

lease.Register( customSponsor );

カスタムスポンサークラスは次のようになります。

private class CustomSponsor : MarshalByRefObject, ISponsor
{
    public TimeSpan Renewal(ILease lease)
    {
        Debug.Assert(lease.CurrentState == LeaseState.Active);
        //Renew lease by 5 minutes

        return TimeSpan.FromMinutes(5);
    }
}

詳細については、リースとスポンサーシップに関するこの役立つMSDNの記事を確認してください。 http://msdn.microsoft.com/en-us/magazine/cc300474.aspx

リンクは機能しなくなりました。2003年12月号に掲載されていましたが、同じページからCHM形式でダウンロードできます。

ウェイバックマシンのリンクはここにあります:

https://web.archive.org/web/20080906214332/http://msdn.microsoft.com/en-us/magazine/cc300474.aspx

于 2014-08-14T18:34:40.787 に答える
4

親AppDomainでは、ILeaseオブジェクトを取得するかInitializeLifetimeServiceGetLifetimeService新しいAppDomainのオブジェクトのプロキシインスタンスで呼び出します。ILease(実装のテスト以外に)自分で実装する必要はありませんISponsor

呼び出しで実装するカスタムスポンサーオブジェクトを登録し、タイムアウトでオブジェクトを構成するよりISponsorも。 ILease.RegisterILease

スポンサーオブジェクトが呼び出されたときにRenewal、オブジェクトを存続させる期間を指定できます。また、渡されたILeaseインスタンスのプロパティを調整/表示することもできます。

于 2012-09-06T19:14:51.020 に答える