다음을 통해 공유


RealProxy 확장

이 항목은 이전 버전의 기존 응용 프로그램과의 호환성을 위해 유지되고 있으나 새로운 개발에는 권장되지 않는 레거시 기술에 대해 설명합니다. 분산 응용 프로그램은 이제 WCF(Windows Communication Foundation)를 사용하여 개발됩니다.

프록시 확장은 프록시 만들기 프로세스에 참여하거나, 원격 메서드 호출을 마샬링하거나, 개체 ID를 확인하려고 할 때 주로 유용할 수 있습니다. 확장 가능한 RealProxy 클래스를 사용하여 자체 프록시를 빌드할 수 있습니다. 사용자 지정 프록시를 빌드하려면 RealProxy 클래스에서 클래스를 파생하고 RealProxy.Invoke 메서드를 재정의해야 합니다. ProxyAttribute 특성에서 파생하고 특성을 ContextBoundObject의 자식에 적용하여 new(Visual Basic의 경우 (New ) 문을 가로챌 수 있습니다. 프록시 특성을 MarshalByRefObject의 자식에 적용하는 것은 지원되지 않습니다. new를 호출하면, 파생된 ProxyAttribute가 사용자 지정 프록시의 인스턴스를 만듭니다. 응용 프로그램에서 사용자 지정 프록시 인스턴스를 직접 만들 수도 있습니다.

응용 프로그램 코드에서 사용자 지정 프록시에 대해 메서드를 호출하면 재정의된 RealProxy.Invoke 메서드가 IMessage를 구현하는 개체와 함께 호출됩니다. IMessage 구현은 메서드에 대한 정보의 이름/값 쌍을 제공하는 IDictionary 구현을 제공합니다. 사전의 특정 항목에 대한 자세한 내용은 IMessage 인터페이스 및 관련 인터페이스(IMethodCallMessageIMethodReturnMessage)에 대한 참조 문서를 참조하십시오.

호출을 실제 개체로 디스패치하는 RemotingServices.ExecuteMessage를 호출하여 재정의된 Invoke 메서드에서 실제 개체를 호출할 수 있습니다.

또한 EnterpriseServicesHelper.CreateConstructionReturnMessage 메서드를 사용하여 IConstructionCallMessage 개체를 처리하고 IConstructionReturnMessage 개체를 생성할 수 있습니다. 또한 RealProxy.InitializeServerObject 메서드를 사용하여 백업 개체(프록시로 표현되는 개체)를 만들 수 있습니다.

파생된 ProxyAttribute를 사용할 때는 재정의된 ProxyAttribute.CreateInstance 메서드에서 실제 개체를 만들고 이를 사용자 지정 프록시에 필드로 저장할 수 있습니다. 사용자 지정 프록시는 실제 개체를 마샬링하여 URI(Uniform Resource Identifier)가 포함된 ObjRef 개체를 가져올 수 있습니다. 실제 개체에 대한 호출을 디스패치하려면 IMessage.Properties 속성에서 반환된 컬렉션의 "__Uri" 항목이 IMessage 구현에 설정되어야 하므로 URI가 프록시에 저장되어야 합니다.

물론 메시지가 실제 개체에 디스패치될 필요는 없습니다. Invoke에서 해당 메시지로 몇 가지 작업을 수행하고 IMethodReturnMessage 인터페이스를 구현하는 개체를 생성하여 반환할 수 있습니다.

마샬링에 참여하려면 RealProxy.CreateObjRef를 재정의하고 ObjRef를 확장하는 사용자 지정 ObjRef 를 제공합니다. 사용자 지정 ObjRef에 사용자 지정 데이터를 추가하려면 ObjRef.GetObjectData를 재정의합니다. .NET Remoting 마샬링 시스템의 개체 ID 기능을 수정하려면 사용자 지정 데이터와 위임을 ObjRef.GetObjectData 메서드에 추가합니다.

deserialization 도중 원격 시스템은 재정의된 GetRealObject를 사용자 지정 ObjRef에 대해 호출합니다. 여기서 기본 메서드가 개체 ID를 처리하고 원격 채널을 설정하므로 기본 GetRealObject 메서드에 위임해야 합니다. 기본 메서드는 재정의된 ProxyAttribute.CreateProxy 메서드도 호출하므로 사용자 지정 프록시를 설정할 수 있습니다.

ObjRef.IsFromThisAppDomainObjRef.IsFromThisProcess를 사용하여 역마샬링 방법을 결정합니다.

마샬링 도중 사용자 지정 ObjRef를 제공하지 않으면 원격 시스템이 개체를 자동으로 마샬링 및 역마샬링하고 호출자의 응용 프로그램 도메인에서 사용자 지정 프록시가 사용되지 않습니다.

참고 항목

작업

Custom Proxies 기술 샘플

참조

RealProxy
ProxyAttribute
RemotingServices
IMessage
IMethodReturnMessage
IMethodCallMessage

관련 자료

고급 원격 서비스