Compartir a través de


Extender RealProxy

Este tema es específico de una tecnología heredada que se mantiene para la compatibilidad con versiones anteriores con aplicaciones existentes y no se recomienda para nuevo desarrollo. Las aplicaciones distribuidas se deberían desarrollar utilizando Windows Communication Foundation (WCF).

Extender el proxy puede ser útil si desea participar en el proceso de creación del proxy, en el cálculo de llamadas de método remoto o determinar la identidad del objeto, entre otras cosas. Puede generar su propio proxy mediante la clase extensible RealProxy. Generar un proxy personalizado implica derivar una clase de la frlrfSystemRuntimeRemotingProxiesRealProxyClassTopicde RealProxy e invalidar el método RealProxy.Invoke. La instrucción new (New en Visual Basic) se puede interceptar derivando del atributo ProxyAttribute y aplicando el atributo a un elemento secundario de ContextBoundObject. (No permite aplicar el atributo de proxy a un elemento secundario de MarshalByRefObject) Cuando se llama a new, el ProxyAttribute derivado crea una instancia del proxy personalizado. Una aplicación también puede crear directamente una instancia del proxy personalizada.

Cuando el código de aplicación llama a un método en un proxy personalizado, se llama al método invalidado RealProxy.Invoke con un objeto que implementa IMessage. La implementación de IMessage proporciona una implementación de IDictionary que proporciona pares de nombre/valor de información sobre el método. Para obtener más información sobre las entradas determinadas en el diccionario, vea la documentación de referencia para la interfaz IMessage y las interfaces relacionadas (IMethodCallMessage e IMethodReturnMessage).

Se puede llamar a un objeto real desde el método Invoke invalidado llamando a RemotingServices.ExecuteMessage, que envía la llamada al objeto real.

También puede utilizar el método EnterpriseServicesHelper.CreateConstructionReturnMessage para procesar un objeto IConstructionCallMessage y generar un objeto IConstructionReturnMessage. También puede utilizar el método RealProxy.InitializeServerObject para crear el objeto de apoyo (el objeto representado por el proxy).

Al utilizar el ProxyAttributederivado, puede crear un objeto real en el método ProxyAttribute.CreateInstance invalidado y almacenarlo como un campo en el proxy personalizado. El proxy personalizado puede calcular las referencias al objeto real para obtener el objeto ObjRef que contiene el Identificador uniforme de recursos (URI). El URI debe estar almacenado en el proxy, porque la entrada del "__Uri" en la colección devuelta por la propiedad IMessage.Properties se debe establecer en la implementación IMessage para enviar una llamada a un objeto real.

Por supuesto, el mensaje no tiene que ser enviado en un objeto real; puede realizar alguna tarea con él en Invoke y generar y devolver un objeto que implementa la interfaz IMethodReturnMessage).

Para participar en el cálculo de referencias, invalide RealProxy.CreateObjRef y proporcione un ObjRef personalizado que extienda ObjRef. Si desea agregar los datos personalizados al ObjRefpersonalizado, invalide ****frlrfSystemRuntimeRemotingObjRefClassGetObjectDataTopic. Agregue sus datos personalizados y delegue al método ObjRef.GetObjectData para modificar las funciones de identidad del objeto del sistema de cálculo de referencias remoto de .NET.

Durante la deserialización, el sistema remoto llama a su GetRealObject invalidado en el ObjRefpersonalizado. Aquí, debería delegar al método base GetRealObject puesto que la base administra la identidad del objeto y establece los canales remotos. La base también llama a su método ProxyAttribute.CreateProxy invalidado para permitirle configurar su proxy personalizado.

ObjRef.IsFromThisAppDomain y ObjRef.IsFromThisProcess se pueden utilizar para determinar cómo desea deserializar.

Tenga en cuenta que si no proporciona un ObjRef personalizado durante el cálculo de referencias, el sistema remoto calcula referencias automáticamente y deserializa el objeto, y el proxy personalizado no se utiliza en el dominio de aplicación del llamador.

Vea también

Tareas

Ejemplo de Custom Proxies Technology

Referencia

RealProxy
ProxyAttribute
RemotingServices
IMessage
IMethodReturnMessage
IMethodCallMessage

Otros recursos

Comunicación remota avanzada