RealProxy 확장
특히 프록시 생성 프로세스, 마샬링 또는 개체 확인에 관여하려는 경우에는 프록시를 확장하는 것이 유용할 수 있습니다. 확장할 수 있는 RealProxy 클래스를 사용하여 사용자 지정 프록시를 빌드할 수 있습니다. 사용자 지정 프록시를 빌드하려면 RealProxy 클래스에서 클래스를 파생시키고 RealProxy.Invoke 메서드를 재정의해야 합니다. ProxyAttribute 특성에서 특성을 파생시키고 ContextBoundObject의 자식에 이 특성을 적용하면 new(Visual Basic에서는 New) 문을 차단할 수 있습니다. MarshalByRefObject의 자식에 프록시 특성을 적용하는 것은 지원되지 않습니다. new가 호출되면 파생된 ProxyAttribute에서 사용자 지정 프록시의 인스턴스를 만듭니다. 응용 프로그램에서 사용자 지정 프록시 인스턴스를 직접 만들 수도 있습니다.
응용 프로그램 코드에서 사용자 지정 프록시에 대해 메서드를 호출하면 재정의된 RealProxy.Invoke 메서드가 IMessage를 구현하는 개체와 함께 호출됩니다. IMessage 구현에서는 메서드에 대한 정보의 이름/값 쌍을 제공하는 IDictionary 구현을 제공합니다. 사전의 특정 항목에 대한 자세한 내용은 IMessage 인터페이스와 관련 인터페이스인 IMethodCallMessage 및 IMethodReturnMessage의 참조 설명서를 참조하십시오.
실제 개체에 대한 호출을 디스패치하는 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에 사용자 지정 데이터를 추가하려는 경우에는 GetObjectData를 재정의합니다. .NET Remoting 마샬링 시스템의 개체 확인 기능을 수정하려면 사용자 지정 데이터 및 대리자를 ObjRef.GetObjectData 메서드에 추가합니다.
deserialize하는 동안 원격 시스템에서는 사용자 지정 ObjRef에 대해 사용자가 재정의한 IObjectReference.GetRealObject를 호출합니다. 여기에서 사용자는 기본 ObjRef.GetRealObject 메서드에 위임해야 합니다. 이 기본 메서드가 개체 확인을 처리하고 원격 채널을 설정하기 때문입니다. 이 기본 메서드에서는 사용자 지정 프록시를 설정할 수 있도록 사용자가 재정의한 ProxyAttribute.CreateProxy 메서드를 호출하기도 합니다.
ObjRef.IsFromThisAppDomain과 ObjRef.IsFromThisProcess는 원하는 역 마샬링 방법을 결정하는 데 사용할 수 있습니다.
마샬링하는 동안 사용자 지정 ObjRef를 제공하지 않으면 원격 시스템에서 자동으로 개체를 마샬링 및 역 마샬링하며 사용자 지정 프록시는 호출자의 응용 프로그램 도메인에서 사용되지 않습니다.
참고 항목
참조
RealProxy
ProxyAttribute
RemotingServices
IMessage
IMethodReturnMessage
IMethodCallMessage