Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

ObjRef (Clase)

Almacena toda la información relevante necesaria para generar un proxy y establecer comunicación con un objeto remoto.

System.Object
  System.Runtime.Remoting.ObjRef

Espacio de nombres:  System.Runtime.Remoting
Ensamblado:  mscorlib (en mscorlib.dll)

[SerializableAttribute]
[ComVisibleAttribute(true)]
[SecurityPermissionAttribute(SecurityAction.InheritanceDemand, Flags = SecurityPermissionFlag.Infrastructure)]
public class ObjRef : IObjectReference, ISerializable

El tipo ObjRef expone los siguientes miembros.

  NombreDescripción
Método públicoObjRef()Inicializa una nueva instancia de la clase ObjRef con valores predeterminados.
Método públicoObjRef(MarshalByRefObject, Type)Inicializa una nueva instancia de la clase ObjRef para hacer referencia a un MarshalByRefObject especificado de un Type dado.
Método protegidoObjRef(SerializationInfo, StreamingContext)Inicializa una nueva instancia de la clase ObjRef a partir de datos serializados.
Arriba

  NombreDescripción
Propiedad públicaChannelInfoObtiene o establece IChannelInfo para el objeto ObjRef.
Propiedad públicaEnvoyInfoObtiene o establece IEnvoyInfo para el objeto ObjRef.
Propiedad públicaTypeInfoObtiene o establece IRemotingTypeInfo para el objeto que ObjRef describe.
Propiedad públicaURIObtiene o establece el identificador URI de la instancia de objeto especificada.
Arriba

  NombreDescripción
Método públicoEquals(Object)Determina si el objeto especificado es igual al objeto actual. (Se hereda de Object).
Método protegidoFinalize Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por la recolección de elementos no utilizados. (Se hereda de Object).
Método públicoGetHashCode Sirve como una función hash para un tipo en particular. (Se hereda de Object).
Método públicoGetObjectDataRellena un objeto SerializationInfo especificado con los datos necesarios para serializar la instancia de ObjRef actual.
Método públicoGetRealObjectDevuelve una referencia al objeto remoto que ObjRef describe.
Método públicoGetType Obtiene el Type de la instancia actual. (Se hereda de Object).
Método públicoIsFromThisAppDomainDevuelve un valor booleano que indica si la instancia de ObjRef actual hace referencia a un objeto ubicado en el objeto AppDomain actual.
Método públicoIsFromThisProcessDevuelve un valor booleano que indica si la instancia de ObjRef actual hace referencia a un objeto ubicado en el proceso actual.
Método protegidoMemberwiseClone Crea una copia superficial del Object actual. (Se hereda de Object).
Método públicoToString Retorna una cadena que representa al objeto actual. (Se hereda de Object).
Arriba

ObjRef es una representación serializable de un objeto que amplía MarshalByRefObject (MBR). ObjRef se utiliza para transferir una referencia de objeto a través de un límite AppDomain. La creación de un objeto ObjRef para otro objeto se conoce como cálculo de referencias. Se puede crear ObjRef (calcular las referencias de MarshalByRefObject) bien de forma explícita, registrando el objeto MBR con la infraestructura de comunicación remota (vea RemotingConfiguration y RemotingServices.Marshal), o bien de forma implícita, pasando un objeto MBR como parámetro cuando se llama a un objeto remoto. La comunicación remota utiliza objetos ObjRef para almacenar y transmitir toda la información relevante acerca del MarshalByRefObject remoto.

ObjRef contiene información que describe el tipo (Type) y la clase del objeto para el que se calculan las referencias, su ubicación exacta e información relacionada con la comunicación sobre cómo alcanzar la subdivisión de comunicación remota donde se encuentra el objeto.

Una vez calculadas las referencias de una clase que implementa MarshalByRefObject, el ObjRef que la representa se transfiere a través de un canal a otro dominio de aplicación, posiblemente en otro proceso o equipo. Cuando se deserializa el ObjRef (vea Serialización de SOAP y XML) en el dominio de la aplicación de destino, se analiza para crear un proxy transparente para el objeto MBR remoto. Esta operación se conoce con el nombre de resolución de referencias.

Un proxy transparente es un objeto que crea la impresión de que el objeto real se encuentra en el espacio del cliente. Esto se consigue enviando al objeto real las llamadas realizadas en el objeto utilizando la infraestructura de comunicación remota. El proxy transparente se almacena en una instancia de una clase controlada en tiempo de ejecución de tipo RealProxy. RealProxy implementa parte de la funcionalidad necesaria para reenviar las operaciones desde el proxy transparente.

Los objetos proxy se pueden utilizar sin tener en cuenta las subdivisiones de comunicación remota existentes en AppDomain. No es necesario que las aplicaciones distingan entre referencias de proxy y referencias de objeto. Sin embargo, los proveedores de servicio que se encargan de cuestiones como la activación, la administración del período de duración y las transacciones sí necesitan hacer esta distinción.

Esta clase realiza una petición de vínculo y de herencia en el nivel de clase. Se produce una excepción SecurityException si el llamador inmediato o la clase derivada no dispone de permisos de infraestructura. Para obtener más información sobre las peticiones de seguridad, vea Peticiones de vínculos y Peticiones de herencia.

En el siguiente ejemplo de código se muestra el uso de un ObjRef personalizado. Para ver el código de activación que prueba el ObjRef personalizado, vea el ejemplo del método RegisterWellKnownServiceType.


// a custom ObjRef class that outputs its status
[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
public class MyObjRef : ObjRef {

   // only instantiate using marshaling or deserialization
   private MyObjRef() { }

   public MyObjRef(MarshalByRefObject o, Type t) : base(o, t)  {
      Console.WriteLine("Created MyObjRef.");
      ORDump();
   }

   public MyObjRef(SerializationInfo i, StreamingContext c) : base(i, c) {
      Console.WriteLine("Deserialized MyObjRef.");
   }

   public override void GetObjectData(SerializationInfo s, StreamingContext c) {
      // After calling the base method, change the type from ObjRef to MyObjRef
      base.GetObjectData(s, c);
      s.SetType(GetType());
      Console.WriteLine("Serialized MyObjRef.");
   }

   public override Object GetRealObject(StreamingContext context) {

      if ( IsFromThisAppDomain() || IsFromThisProcess() ) {
         Console.WriteLine("Returning actual object referenced by MyObjRef.");
         return base.GetRealObject(context);
      }
      else {
         Console.WriteLine("Returning proxy to remote object.");
         return RemotingServices.Unmarshal(this);
      }
   }   

   public void ORDump() {

      Console.WriteLine(" --- Reporting MyObjRef Info --- ");
      Console.WriteLine("Reference to {0}.", TypeInfo.TypeName);
      Console.WriteLine("URI is {0}.", URI);
      Console.WriteLine("\nWriting EnvoyInfo: ");

      if ( EnvoyInfo != null) {

         IMessageSink EISinks = EnvoyInfo.EnvoySinks;
         while (EISinks != null) {
            Console.WriteLine("\tSink: " + EISinks.ToString());  
            EISinks = EISinks.NextSink;
         }
      }
      else
         Console.WriteLine("\t {no sinks}");

      Console.WriteLine("\nWriting ChannelInfo: ");
      for (int i = 0; i < ChannelInfo.ChannelData.Length; i++)
         Console.WriteLine ("\tChannel: {0}", ChannelInfo.ChannelData[i]);
      Console.WriteLine(" ----------------------------- ");
   }
}


// a class that uses MyObjRef
[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
public class LocalObject : MarshalByRefObject {
   // overriding CreateObjRef will allow us to return a custom ObjRef
   public override ObjRef CreateObjRef(Type t) {
      return new MyObjRef(this, t);
   }
}


.NET Framework

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft