ObjRef Klasse

Definition

Speichert alle relevanten Informationen, die zum Generieren eines Proxys für die Kommunikation mit einem Remoteobjekt erforderlich sind.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
Vererbung
ObjRef
Attribute
Implementiert

Beispiele

Im folgenden Codebeispiel wird die Verwendung eines benutzerdefinierten ObjRefveranschaulicht.The following code example demonstrates the use of a custom ObjRef. Um den Aktivierungscode anzuzeigen, der die Benutzer ObjRefdefinierte testet, sehen Sie sich RegisterWellKnownServiceType das Beispiel für die-Methode an.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

Hinweise

Eine ObjRef ist eine serialisierbare Darstellung eines Objekts, das ( MarshalByRefObject MBR) erweitert.A ObjRef is a serializable representation of an object that extends MarshalByRefObject (MBR). Ein ObjRef -Objekt wird verwendet, um einen Objekt Verweis AppDomain über eine Grenze zu übertragen.A ObjRef is used to transfer an object reference across a AppDomain boundary. Das Erstellen ObjRef eines für ein Objekt wird als Marshalling bezeichnet.Creating a ObjRef for an object is known as marshaling. Sie können ObjRef ein-Objekt (Marshal MarshalByRefObjecta) entweder explizit erstellen, indem Sie das MBR-Objekt bei der Remote Infrastruktur RemotingConfiguration registrieren RemotingServices.Marshal(siehe und) oder implizit, indem Sie ein MBR-Objekt als Parameter übergeben, wenn Sie einen Remote Aufruf von durchführen. Objekt.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. Remoting verwendet ObjRef -Objekte, um alle relevanten Informationen über das zu speichern MarshalByRefObject und zu übertragen, das Remoting ist.Remoting uses ObjRef objects to store and transmit all the relevant information about the MarshalByRefObject being remoted.

Enthält Informationen, die die Type -Klasse und die-Klasse des gemarshallten Objekts, den genauen Speicherort und die Kommunikations bezogenen Informationen zum Erreichen der Remoting-Unterteilung, in der sich das-Objekt befindet, beschreiben. 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.

Nachdem eine Klasse, MarshalByRefObject die implementiert, gemarshallt wird, wird die, die ObjRef Sie darstellt, über einen Kanal in eine andere Anwendungsdomäne (möglicherweise in einem anderen Prozess oder Computer) übertragenAfter 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. Wenn die ObjRef deserialisiert wird (siehe XML-und SOAP-Serialisierung), wird Sie in der Ziel Anwendungsdomäne analysiert, um einen transparenten Proxy für das Remote MBR-Objekt zu erstellen.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. Dieser Vorgang wird als "Unmarshalling" bezeichnet.This operation is known as unmarshaling.

Ein transparenter Proxy ist ein Objekt, das die Illusion bereitstellt, dass sich das eigentliche Objekt im Bereich des Clients befindet.A transparent proxy is an object that provides the illusion that the actual object resides in the client's space. Dies wird erreicht, indem Aufrufe an das echte Objekt mithilfe der Remotinginfrastruktur weitergeleitet werden.It achieves this by forwarding calls made on it to the real object using the remoting infrastructure. Der transparente Proxy wird selbst von einer Instanz einer verwalteten Lauf Zeit Klasse des Typs RealProxyuntergebracht.The transparent proxy is itself housed by an instance of a managed run-time class of type RealProxy. RealProxy Implementiert einen Teil der Funktionalität, der zum Weiterleiten der Vorgänge vom transparenten Proxy benötigt wird.The RealProxy implements a part of the functionality needed to forward the operations from the transparent proxy.

Ein Proxy Objekt kann ohne Rücksicht auf alle Remoting-Unterbereiche innerhalb eines AppDomainverwendet werden.A proxy object can be used without regard to any remoting subdivisions within a AppDomain. Anwendungen müssen nicht zwischen Proxy verweisen und Objekt verweisen unterscheiden.Applications need not distinguish between proxy references and object references. Allerdings müssen Dienstanbieter, die Probleme wie Aktivierung, Lebensdauer Verwaltung und Transaktionen behandeln, solche Unterschiede treffen.However, service providers dealing with issues such as activation, lifetime management, and transactions need to make such distinctions.

Diese Klasse stellt einen Link Aufruf und eine Vererbungs Anforderung auf Klassenebene dar.This class makes a link demand and an inheritance demand at the class level. Eine SecurityException wird ausgelöst, wenn der unmittelbare Aufrufer oder die abgeleitete Klasse nicht über eine Infrastruktur Berechtigung verfügt.A SecurityException is thrown when either the immediate caller or the derived class does not have infrastructure permission. Ausführliche Informationen zu Sicherheitsanforderungen finden Sie unter Link Aufrufe und Vererbungs Anforderungen.For details about security demands, see Link Demands and Inheritance Demands.

Konstruktoren

ObjRef()

Initialisiert eine neue Instanz der ObjRef-Klasse mit Standardwerten.Initializes a new instance of the ObjRef class with default values.

ObjRef(MarshalByRefObject, Type)

Initialisiert eine neue Instanz der ObjRef-Klasse, um auf ein angegebenes MarshalByRefObject eines angegebenen Type zu verweisen.Initializes a new instance of the ObjRef class to reference a specified MarshalByRefObject of a specified Type.

ObjRef(SerializationInfo, StreamingContext)

Initialisiert anhand von serialisierten Daten eine neue Instanz der ObjRef-Klasse.Initializes a new instance of the ObjRef class from serialized data.

Eigenschaften

ChannelInfo

Ruft die IChannelInfo für den ObjRef ab oder legt diese fest.Gets or sets the IChannelInfo for the ObjRef.

EnvoyInfo

Ruft die IEnvoyInfo für den ObjRef ab oder legt diese fest.Gets or sets the IEnvoyInfo for the ObjRef.

TypeInfo

Ruft die IRemotingTypeInfo für das Objekt ab, das ObjRef beschreibt, oder legt diese fest.Gets or sets the IRemotingTypeInfo for the object that the ObjRef describes.

URI

Ruft den URI der angegebenen Objektinstanz ab oder legt diesen fest.Gets or sets the URI of the specific object instance.

Methoden

Equals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.Determines whether the specified object is equal to the current object.

(Geerbt von Object)
GetHashCode()

Fungiert als Standardhashfunktion.Serves as the default hash function.

(Geerbt von Object)
GetObjectData(SerializationInfo, StreamingContext)

Füllt eine angegebene SerializationInfo mit den Daten aus, die für die Serialisierung der aktuellen ObjRef-Instanz erforderlich sind.Populates a specified SerializationInfo with the data needed to serialize the current ObjRef instance.

GetRealObject(StreamingContext)

Gibt einen Verweis auf das von ObjRef beschriebene Remoteobjekt zurück.Returns a reference to the remote object that the ObjRef describes.

GetType()

Ruft den Type der aktuellen Instanz ab.Gets the Type of the current instance.

(Geerbt von Object)
IsFromThisAppDomain()

Gibt einen booleschen Wert zurück, der angibt, ob die aktuelle ObjRef-Instanz auf ein Objekt verweist, das sich in der aktuellen AppDomain befindet.Returns a Boolean value that indicates whether the current ObjRef instance references an object located in the current AppDomain.

IsFromThisProcess()

Gibt einen booleschen Wert zurück, der angibt, ob die aktuelle ObjRef-Instanz auf ein Objekt verweist, das sich im aktuellen Prozess befindet.Returns a Boolean value that indicates whether the current ObjRef instance references an object located in the current process.

MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.Creates a shallow copy of the current Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.Returns a string that represents the current object.

(Geerbt von Object)

Sicherheit

SecurityPermission
für den Betrieb mit Infrastruktur Code.for operating with infrastructure code. Anforderungs Wert: InheritanceDemand; Berechtigungs Wert:InfrastructureDemand value: InheritanceDemand; Permission Value: Infrastructure

Gilt für:

Siehe auch