ObjRef Classe

Definizione

Memorizza tutte le informazioni rilevanti richieste per generare un proxy allo scopo di comunicare con un oggetto remoto.Stores all relevant information required to generate a proxy in order to communicate with a remote object.

public ref class ObjRef : System::Runtime::Serialization::IObjectReference, System::Runtime::Serialization::ISerializable
[System.Runtime.InteropServices.ComVisible(true)]
[System.Security.SecurityCritical]
[System.Serializable]
public class ObjRef : System.Runtime.Serialization.IObjectReference, System.Runtime.Serialization.ISerializable
type ObjRef = class
    interface IObjectReference
    interface ISerializable
Public Class ObjRef
Implements IObjectReference, ISerializable
Ereditarietà
ObjRef
Attributi
Implementazioni

Esempi

Nell'esempio di codice riportato di seguito viene illustrato l' ObjRefutilizzo di un oggetto personalizzato.The following code example demonstrates the use of a custom ObjRef. Per visualizzare il codice di attivazione che testa l' ObjRefoggetto personalizzato, vedere l'esempio RegisterWellKnownServiceType relativo al metodo.To view the activation code that tests the custom ObjRef, see the example for the RegisterWellKnownServiceType method.

// a custom ObjRef class that outputs its status
[System::Security::Permissions::SecurityPermissionAttribute(
   System::Security::Permissions::SecurityAction::Demand, 
   Flags=System::Security::Permissions::SecurityPermissionFlag::SerializationFormatter)]
[System::Security::Permissions::SecurityPermissionAttribute
(System::Security::Permissions::SecurityAction::Demand, 
Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)]	
[System::Security::Permissions::SecurityPermissionAttribute
(System::Security::Permissions::SecurityAction::InheritanceDemand, 
Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)]
public ref class MyObjRef: public ObjRef
{
private:

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

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

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

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

   virtual Object^ GetRealObject( StreamingContext context ) override
   {
      if ( IsFromThisAppDomain() || IsFromThisProcess() )
      {
         Console::WriteLine( "Returning actual Object^ referenced by MyObjRef." );
         return ObjRef::GetRealObject( context );
      }
      else
      {
         Console::WriteLine( "Returning proxy to remote Object^." );
         return RemotingServices::Unmarshal( this );
      }
   }

   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 != nullptr )
      {
         IMessageSink^ EISinks = EnvoyInfo->EnvoySinks;
         while ( EISinks != nullptr )
         {
            Console::WriteLine( "\tSink: {0}", EISinks );
            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
public ref class LocalObject: public MarshalByRefObject
{
public:

   // overriding CreateObjRef will allow us to return a custom ObjRef
   [System::Security::Permissions::SecurityPermissionAttribute
   (System::Security::Permissions::SecurityAction::LinkDemand,
   Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)]
   virtual ObjRef^ CreateObjRef( Type^ t ) override
   {
      return gcnew MyObjRef( this,t );
   }
};
// 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);
   }
}
' a custom ObjRef class that outputs its status
<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
Public Class MyObjRef
   Inherits ObjRef

   ' only instantiate using marshaling or deserialization
   Private Sub New()
   End Sub

   Public Sub New(ByVal o As MarshalByRefObject, ByVal t As Type)
      MyBase.New(o, t)
      Console.WriteLine("Created MyObjRef.")
      ORDump()
   End Sub

   Public Sub New(ByVal i As SerializationInfo, ByVal c As StreamingContext)
      MyBase.New(i, c)
      Console.WriteLine("Deserialized MyObjRef.")
   End Sub

   Public Overrides Sub GetObjectData(ByVal s As SerializationInfo, ByVal c As StreamingContext)
      ' After calling the base method, change the type from ObjRef to MyObjRef
      MyBase.GetObjectData(s, c)
      s.SetType([GetType]())
      Console.WriteLine("Serialized MyObjRef.")
   End Sub

   Public Overrides Function GetRealObject(ByVal context As StreamingContext) As [Object]
      If IsFromThisAppDomain() Or IsFromThisProcess() Then
         Console.WriteLine("Returning actual object referenced by MyObjRef.")
         Return MyBase.GetRealObject(context)
      Else
         Console.WriteLine("Returning proxy to remote object.")
         Return RemotingServices.Unmarshal(Me)
      End If
   End Function

   Public Sub ORDump()
      Console.WriteLine(" --- Reporting MyObjRef Info --- ")
      Console.WriteLine("Reference to {0}.", TypeInfo.TypeName)
      Console.WriteLine("URI is {0}.", URI)

      Console.WriteLine(ControlChars.Cr + "Writing EnvoyInfo: ")
      If Not (EnvoyInfo Is Nothing) Then
         Dim EISinks As IMessageSink = EnvoyInfo.EnvoySinks
         Dim count As Integer = 0
         While Not (EISinks Is Nothing)
            Console.WriteLine(ControlChars.Tab + "Interated through sink #{0}", (count = count + 1))
            EISinks = EISinks.NextSink
         End While
      Else
         Console.WriteLine(ControlChars.Tab + " {no sinks}")
      End If
      Console.WriteLine(ControlChars.Cr + "Writing ChannelInfo: ")
      Dim i As Integer
      For i = 0 To ChannelInfo.ChannelData.Length - 1
         Console.WriteLine(ControlChars.Tab + "Channel: {0}", ChannelInfo.ChannelData(i))
      Next i
      Console.WriteLine(" ----------------------------- ")
   End Sub
   
End Class


' a class that uses MyObjRef
<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
Public Class LocalObject
   Inherits MarshalByRefObject

   ' overriding CreateObjRef will allow us to return a custom ObjRef
   Public Overrides Function CreateObjRef(ByVal t As Type) As ObjRef
      Return New MyObjRef(Me, t)
   End Function

End Class

Commenti

Un ObjRef è una rappresentazione serializzabile di un oggetto che MarshalByRefObject estende (MBR).A ObjRef is a serializable representation of an object that extends MarshalByRefObject (MBR). Viene usato per trasferire un riferimento a un oggetto in AppDomain un limite. ObjRefA ObjRef is used to transfer an object reference across a AppDomain boundary. La creazione ObjRef di un oggetto per un oggetto è nota come marshalling.Creating a ObjRef for an object is known as marshaling. È possibile creare un ObjRef (marshalling MarshalByRefObjecta) in modo esplicito, registrando l'oggetto MBR con l'infrastruttura .NET Remoting RemotingConfiguration ( RemotingServices.Marshalvedere e) o in modo implicito passando un oggetto MBR come parametro quando si chiama un oggetto remoto oggetto.You can create a ObjRef (marshal a MarshalByRefObject) either explicitly, by registering the MBR object with the remoting infrastructure (see RemotingConfiguration and RemotingServices.Marshal), or implicitly, by passing an MBR object as a parameter when calling a remote object. La comunicazione ObjRef remota utilizza gli oggetti per archiviare e trasmettere tutte le informazioni MarshalByRefObject rilevanti sull'oggetto da remoto.Remoting uses ObjRef objects to store and transmit all the relevant information about the MarshalByRefObject being remoted.

Contiene informazioni che descrivono la Type classe e dell'oggetto di cui viene eseguito il marshalling, la posizione esatta e le informazioni relative alla comunicazione su come raggiungere la suddivisione remota in cui si trova l'oggetto. ObjRefThe ObjRef contains information that describes the Type and class of the object being marshaled, its exact location, and communication-related information on how to reach the remoting subdivision where the object is located.

Quando viene effettuato il MarshalByRefObject marshalling di una classe ObjRef che implementa, l'oggetto che lo rappresenta viene trasferito tramite un canale in un altro dominio dell'applicazione, possibilmente in un altro processo o computer.After a class implementing MarshalByRefObject is marshaled, the ObjRef that represents it is transferred through a channel into another application domain, possibly in another process or computer. Quando viene deserializzato (vedere serializzazione XML e SOAP) nel dominio dell'applicazione di destinazione, viene analizzato per creare un proxy trasparente per l'oggetto MBR remoto. ObjRefWhen the ObjRef is deserialized (see XML and SOAP Serialization) in the target application domain, it is parsed to create a transparent proxy for the remote MBR object. Questa operazione è nota come unmarshalling.This operation is known as unmarshaling.

Un proxy trasparente è un oggetto che fornisce l'illusione che l'oggetto effettivo risieda nello spazio del client.A transparent proxy is an object that provides the illusion that the actual object resides in the client's space. Questa operazione viene eseguita tramite l'invio di chiamate effettuate su di esso all'oggetto reale mediante l'infrastruttura .NET Remoting.It achieves this by forwarding calls made on it to the real object using the remoting infrastructure. Il proxy trasparente è a sua volta ospitato da un'istanza di una classe di runtime gestita di tipo RealProxy.The transparent proxy is itself housed by an instance of a managed run-time class of type RealProxy. RealProxy Implementa una parte della funzionalità necessaria per l'inoltro delle operazioni dal proxy trasparente.The RealProxy implements a part of the functionality needed to forward the operations from the transparent proxy.

Un oggetto proxy può essere usato senza considerare le sottodivisioni remote all'interno di AppDomainun.A proxy object can be used without regard to any remoting subdivisions within a AppDomain. Le applicazioni non devono distinguere tra riferimenti a proxy e riferimenti a oggetti.Applications need not distinguish between proxy references and object references. Tuttavia, i provider di servizi che gestiscono problemi quali attivazione, gestione della durata e transazioni devono apportare tali distinzioni.However, service providers dealing with issues such as activation, lifetime management, and transactions need to make such distinctions.

Questa classe esegue una richiesta di collegamento e una richiesta di ereditarietà a livello di classe.This class makes a link demand and an inheritance demand at the class level. Viene SecurityException generata un'eccezione quando il chiamante immediato o la classe derivata non dispone dell'autorizzazione di infrastruttura.A SecurityException is thrown when either the immediate caller or the derived class does not have infrastructure permission. Per informazioni dettagliate sulle richieste di sicurezza, vedere richieste di collegamento e richieste di ereditarietà.For details about security demands, see Link Demands and Inheritance Demands.

Costruttori

ObjRef()

Inizializza una nuova istanza della classe ObjRef con i valori predefiniti.Initializes a new instance of the ObjRef class with default values.

ObjRef(MarshalByRefObject, Type)

Inizializza una nuova istanza della classe ObjRef per fare riferimento a un oggetto MarshalByRefObject con un Type specificato.Initializes a new instance of the ObjRef class to reference a specified MarshalByRefObject of a specified Type.

ObjRef(SerializationInfo, StreamingContext)

Inizializza una nuova istanza della classe ObjRef dai dati serializzati.Initializes a new instance of the ObjRef class from serialized data.

Proprietà

ChannelInfo

Ottiene o imposta l'oggetto IChannelInfo per ObjRef.Gets or sets the IChannelInfo for the ObjRef.

EnvoyInfo

Ottiene o imposta l'oggetto IEnvoyInfo per ObjRef.Gets or sets the IEnvoyInfo for the ObjRef.

TypeInfo

Ottiene o imposta l'interfaccia IRemotingTypeInfo per l'oggetto descritto da ObjRef.Gets or sets the IRemotingTypeInfo for the object that the ObjRef describes.

URI

Ottiene o imposta l'URI dell'istanza dell'oggetto specifico.Gets or sets the URI of the specific object instance.

Metodi

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.Determines whether the specified object is equal to the current object.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.Serves as the default hash function.

(Ereditato da Object)
GetObjectData(SerializationInfo, StreamingContext)

Popola un oggetto SerializationInfo specificato con tutti i dati necessari per serializzare l'istanza corrente di ObjRef.Populates a specified SerializationInfo with the data needed to serialize the current ObjRef instance.

GetRealObject(StreamingContext)

Restituisce un riferimento all'oggetto remoto descritto dall'oggetto ObjRef.Returns a reference to the remote object that the ObjRef describes.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.Gets the Type of the current instance.

(Ereditato da Object)
IsFromThisAppDomain()

Restituisce un valore Boolean che indica se l'istanza corrente della classe ObjRef fa riferimento a un oggetto presente nella classe AppDomain corrente.Returns a Boolean value that indicates whether the current ObjRef instance references an object located in the current AppDomain.

IsFromThisProcess()

Restituisce un valore Boolean che indica se l'istanza corrente della classe ObjRef fa riferimento a un oggetto presente nel processo corrente.Returns a Boolean value that indicates whether the current ObjRef instance references an object located in the current process.

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.Creates a shallow copy of the current Object.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.Returns a string that represents the current object.

(Ereditato da Object)

Sicurezza

SecurityPermission
per l'utilizzo del codice dell'infrastruttura.for operating with infrastructure code. Valore richiesta: InheritanceDemand; Valore autorizzazione:InfrastructureDemand value: InheritanceDemand; Permission Value: Infrastructure

Si applica a

Vedi anche