임대 갱신
임대가 만들어진 후 해당 임대에 대해 변경할 수 있는 유일한 속성은 ILease.CurrentLeaseTime입니다. 임대를 갱신할 때는 클라이언트에서 ILease.Renew를 직접 호출하는 방법이나 스폰서에 연결하여 임대 갱신을 요청하는 방법을 사용할 수 있습니다.
스폰서
스폰서는 호스트 응용 프로그램 도메인으로부터 해당 스폰서가 특정 개체의 수명 임대를 확장할지 여부에 대한 쿼리를 수신합니다. 스폰서는 ISponsor를 구현하며, 임대에 대한 참조를 얻은 다음 ILease.Register를 호출함으로써 임대 관리자에 등록됩니다. 일반적으로 원격 개체마다 많은 클라이언트가 있는 경우에는 모든 클라이언트에서 원격 개체에 요청을 보내는 것보다 원격 개체에서 클라이언트 중 하나에 임대 갱신에 대한 요청을 보내는 것이 더 효율적입니다.
참고
.NET Framework 버전 1.1부터는 서버 개체의 수명에 관여하는 스폰서를 등록하려면 서버 응용 프로그램 도메인과 스폰서 모두에서 자동 deserialization을 Full로 설정해야 합니다. 자세한 내용은 .NET Remoting에서의 자동 Deserialization을 참조하십시오.
스폰서를 사용하면 여러 클라이언트 간에 동적 갱신 정책도 사용할 수 있습니다. 동적 갱신 정책은 하나 이상의 클라이언트로 인해 여러 원격 개체에 해결해야 할 문제가 생기는 경우 이러한 문제를 동시에 처리하는 데 효과적입니다. 원격 개체가 해결책을 반환하면 스폰서는 이에 대한 알림을 받고 다른 모든 원격 개체의 임대가 만료되도록 합니다.
이 방법을 사용하면 클라이언트에서 원격 개체를 찾아야 하는 대신 원격 개체가 현재 위치에서 클라이언트에 연결하므로 원격 개체를 마이그레이션하는 데도 유용합니다.
스폰서가 대규모 네트워크나 방화벽이 많은 인터넷에 있을 경우에는 스폰서에 액세스하기가 어려울 수 있다는 단점도 있습니다. 스폰서를 백업하거나 어느 정도 안전하게 스폰서에 액세스할 수 있는 호스트 응용 프로그램 도메인 가까이에 스폰서를 배치하면 이 문제를 해결할 수 있습니다.
호스트 응용 프로그램 도메인의 임대 관리자는 스폰서 목록을 관리합니다. 임대 기간을 갱신하는 데 스폰서가 필요한 경우 목록의 맨 위에 있는 스폰서에게 기간 갱신을 요구합니다. 스폰서가 ILease.SponsorshipTimeout 시간 범위 안에 응답하지 않으면 해당 스폰서는 목록에서 제거되고 목록에 있는 다음 스폰서가 호출됩니다.
스폰서를 사용하여 임대 갱신
스폰서는 특정 개체 참조에 대한 임대를 얻고 자체를 스폰서로 등록한 다음 원격 임대 관리자가 ISponsor.Renewal을 호출하기를 기다림으로써 수명 임대에 관여합니다. 개체 임대는 임대가 필요한 개체를 매개 변수로 전달하여 RemotingServices.GetLifetimeService를 호출함으로써 얻습니다. 이 호출은 RemotingServices 클래스의 정적 메서드입니다. 개체가 응용 프로그램 도메인에 대해 로컬인 경우 이 호출에 대한 매개 변수는 개체에 대한 로컬 참조이며 반환되는 임대는 임대에 대한 로컬 참조입니다. 개체가 원격인 경우에는 프록시가 매개 변수로 전달됩니다. 임대 자체는 MBR(Marshal-By-Reference) 개체 즉, 참조로 마샬링되는 개체이므로 원격 개체에 대한 참조를 얻을 때 해당 임대에 대한 프록시를 얻게 됩니다. 따라서 임대에 대한 메서드를 호출할 때는 서버 프로세스를 원격으로 호출하는 것입니다.
그런 다음에는 Register를 호출하고 스폰서와 선택적 요소인 TimeSpan 개체(이미 만들어진 경우)를 전달하여 원격 임대 관리자에 스폰서를 등록합니다.
해당 개체에 대한 임대가 만료된 경우 임대 관리자는 원격 스폰서를 다시 호출할 수도 있습니다. Renewal 구현에 대한 스폰서의 반환 값은 새로운 임대 기간이 됩니다.