ObjRef ObjRef ObjRef ObjRef Class

Définition

Stocke toutes les informations appropriées requises pour générer un proxy permettant de communiquer avec un objet distant.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
Héritage
ObjRefObjRefObjRefObjRef
Attributs
Implémente

Exemples

L’exemple de code suivant illustre l’utilisation d’un ObjRefpersonnalisé.The following code example demonstrates the use of a custom ObjRef. Pour afficher le code d’activation qui teste ObjRefle personnalisé, consultez l’exemple RegisterWellKnownServiceType de la méthode.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

Remarques

Un ObjRef est une représentation sérialisable d’un objet qui étend MarshalByRefObject (MBR).A ObjRef is a serializable representation of an object that extends MarshalByRefObject (MBR). Un ObjRef est utilisé pour transférer une référence d’objet sur AppDomain une limite.A ObjRef is used to transfer an object reference across a AppDomain boundary. La création ObjRef d’un pour un objet est appelée marshaling.Creating a ObjRef for an object is known as marshaling. Vous pouvez créer un ObjRef (Marshal a MarshalByRefObject) de manière explicite, en inscrivant l’objet MBR auprès de l’infrastructure de RemotingConfiguration communication RemotingServices.Marshalà distance (voir et), ou implicitement, en passant un objet MBR en tant que paramètre lors de l’appel d’un dessin.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 communication à ObjRef distance utilise des objets pour stocker et transmettre toutes les informations MarshalByRefObject pertinentes sur le à distance.Remoting uses ObjRef objects to store and transmit all the relevant information about the MarshalByRefObject being remoted.

Le ObjRef contient des informations qui décrivent la Type classe et de l’objet qui est marshalé, son emplacement exact et des informations relatives à la communication sur la façon d’atteindre la sous-division de communication à distance où se trouve l’objet.The 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.

Une fois qu’une MarshalByRefObject classe implémentée est marshalée, le qui le ObjRef représente est transféré via un canal dans un autre domaine d’application, éventuellement dans un autre processus ou ordinateur.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. Lorsque le ObjRef est désérialisé (voir sérialisation XML et SOAP) dans le domaine d’application cible, il est analysé pour créer un proxy transparent pour l’objet MBR distant.When 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. Cette opération est appelée démarshaling.This operation is known as unmarshaling.

Un proxy transparent est un objet qui donne l’illusion que l’objet réel réside dans l’espace du client.A transparent proxy is an object that provides the illusion that the actual object resides in the client's space. Pour ce faire, il transfère les appels effectués sur l’objet réel à l’aide de l’infrastructure de communication à distance.It achieves this by forwarding calls made on it to the real object using the remoting infrastructure. Le proxy transparent est lui-même hébergé par une instance d’une classe d’exécution managée de RealProxytype.The transparent proxy is itself housed by an instance of a managed run-time class of type RealProxy. RealProxy Implémente une partie des fonctionnalités nécessaires pour transférer les opérations à partir du proxy transparent.The RealProxy implements a part of the functionality needed to forward the operations from the transparent proxy.

Un objet proxy peut être utilisé sans tenir compte des sous-divisions de communication à distance AppDomaindans un.A proxy object can be used without regard to any remoting subdivisions within a AppDomain. Les applications n’ont pas besoin de faire la distinction entre les références de proxy et les références d’objet.Applications need not distinguish between proxy references and object references. Toutefois, les fournisseurs de services qui traitent des problèmes tels que l’activation, la gestion de la durée de vie et les transactions doivent faire ces distinctions.However, service providers dealing with issues such as activation, lifetime management, and transactions need to make such distinctions.

Cette classe effectue une demande de liaison et une demande d’héritage au niveau de la classe.This class makes a link demand and an inheritance demand at the class level. Une SecurityException exception est levée lorsque l’appelant immédiat ou la classe dérivée ne dispose pas d’une autorisation d’infrastructure.A SecurityException is thrown when either the immediate caller or the derived class does not have infrastructure permission. Pour plus d’informations sur les demandes de sécurité, consultez demandes de liaison et demandes d’héritage.For details about security demands, see Link Demands and Inheritance Demands.

Constructeurs

ObjRef() ObjRef() ObjRef() ObjRef()

Initialise une nouvelle instance de la classe ObjRef avec des valeurs par défaut.Initializes a new instance of the ObjRef class with default values.

ObjRef(MarshalByRefObject, Type) ObjRef(MarshalByRefObject, Type) ObjRef(MarshalByRefObject, Type) ObjRef(MarshalByRefObject, Type)

Initialise une nouvelle instance de la classe ObjRef pour référencer un MarshalByRefObject spécifié d'un Type spécifié.Initializes a new instance of the ObjRef class to reference a specified MarshalByRefObject of a specified Type.

ObjRef(SerializationInfo, StreamingContext) ObjRef(SerializationInfo, StreamingContext) ObjRef(SerializationInfo, StreamingContext) ObjRef(SerializationInfo, StreamingContext)

Initialise une nouvelle instance de la classe ObjRef à partir de données sérialisées.Initializes a new instance of the ObjRef class from serialized data.

Propriétés

ChannelInfo ChannelInfo ChannelInfo ChannelInfo

Obtient ou définit IChannelInfo pour ObjRef.Gets or sets the IChannelInfo for the ObjRef.

EnvoyInfo EnvoyInfo EnvoyInfo EnvoyInfo

Obtient ou définit IEnvoyInfo pour ObjRef.Gets or sets the IEnvoyInfo for the ObjRef.

TypeInfo TypeInfo TypeInfo TypeInfo

Obtient ou définit le IRemotingTypeInfo pour l'objet que ObjRef décrit.Gets or sets the IRemotingTypeInfo for the object that the ObjRef describes.

URI URI URI URI

Obtient ou définit l'URI de l'instance d'objet spécifique.Gets or sets the URI of the specific object instance.

Méthodes

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Détermine si l'objet spécifié est identique à l'objet actuel.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Fait office de fonction de hachage par défaut.Serves as the default hash function.

(Inherited from Object)
GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext)

Remplit un SerializationInfo spécifié à l'aide des données requises pour sérialiser l'instance ObjRef en cours.Populates a specified SerializationInfo with the data needed to serialize the current ObjRef instance.

GetRealObject(StreamingContext) GetRealObject(StreamingContext) GetRealObject(StreamingContext) GetRealObject(StreamingContext)

Retourne une référence à l'objet distant décrit par ObjRef.Returns a reference to the remote object that the ObjRef describes.

GetType() GetType() GetType() GetType()

Obtient le Type de l'instance actuelle.Gets the Type of the current instance.

(Inherited from Object)
IsFromThisAppDomain() IsFromThisAppDomain() IsFromThisAppDomain() IsFromThisAppDomain()

Retourne une valeur Boolean indiquant si l'instance ObjRef en cours référence un objet se trouvant dans le AppDomain en cours.Returns a Boolean value that indicates whether the current ObjRef instance references an object located in the current AppDomain.

IsFromThisProcess() IsFromThisProcess() IsFromThisProcess() IsFromThisProcess()

Retourne une valeur Boolean indiquant si l'instance ObjRef en cours référence un objet se trouvant dans le processus en cours.Returns a Boolean value that indicates whether the current ObjRef instance references an object located in the current process.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crée une copie superficielle de l'objet Object actuel.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Retourne une chaîne qui représente l'objet actuel.Returns a string that represents the current object.

(Inherited from Object)

Sécurité

SecurityPermission
pour utiliser le code d’infrastructure.for operating with infrastructure code. Valeur de la InheritanceDemanddemande:; Valeur d’autorisation:InfrastructureDemand value: InheritanceDemand; Permission Value: Infrastructure

S’applique à

Voir aussi