Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

ObjRef-Klasse

 

Veröffentlicht: Oktober 2016

Speichert alle relevanten Informationen, die zum Generieren eines Proxys für die Kommunikation mit einem Remoteobjekt erforderlich.

Namespace:   System.Runtime.Remoting
Assembly:  mscorlib (in mscorlib.dll)

System.Object
  System.Runtime.Remoting.ObjRef

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

NameBeschreibung
System_CAPS_pubmethodObjRef()

Initialisiert eine neue Instanz der ObjRef-Klasse mit Standardwerten.

System_CAPS_pubmethodObjRef(MarshalByRefObject, Type)

Initialisiert eine neue Instanz der der ObjRef Klasse, um eine angegebene verweisen MarshalByRefObject eines angegebenen Type.

System_CAPS_protmethodObjRef(SerializationInfo, StreamingContext)

Initialisiert anhand von serialisierten Daten eine neue Instanz der ObjRef-Klasse.

NameBeschreibung
System_CAPS_pubpropertyChannelInfo

Ruft die IChannelInfo für den ObjRef ab oder legt diese fest.

System_CAPS_pubpropertyEnvoyInfo

Ruft die IEnvoyInfo für den ObjRef ab oder legt diese fest.

System_CAPS_pubpropertyTypeInfo

Ruft ab oder legt die IRemotingTypeInfo für das Objekt, die die ObjRef beschreibt.

System_CAPS_pubpropertyURI

Ruft ab oder legt den URI der angegebenen Objektinstanz.

NameBeschreibung
System_CAPS_pubmethodEquals(Object)

Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist.(Geerbt von „Object“.)

System_CAPS_protmethodFinalize()

Gibt einem Objekt Gelegenheit, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Geerbt von „Object“.)

System_CAPS_pubmethodGetHashCode()

Fungiert als die Standardhashfunktion.(Geerbt von „Object“.)

System_CAPS_pubmethodGetObjectData(SerializationInfo, StreamingContext)

Füllt eine angegebene SerializationInfo mit den Daten, die zum Serialisieren des aktuellen ObjRef Instanz.

System_CAPS_pubmethodGetRealObject(StreamingContext)

Gibt einen Verweis auf das Remoteobjekt zurück, die die ObjRef beschreibt.

System_CAPS_pubmethodGetType()

Ruft den Type der aktuellen Instanz ab.(Geerbt von „Object“.)

System_CAPS_pubmethodIsFromThisAppDomain()

Gibt einen booleschen Wert, der angibt, ob die aktuelle ObjRef Instanz verweist auf ein Objekt befindet sich in der aktuellen AppDomain.

System_CAPS_pubmethodIsFromThisProcess()

Gibt einen booleschen Wert, der angibt, ob die aktuelle ObjRef Instanz verweist auf ein Objekt, das sich im aktuellen Prozess befinden.

System_CAPS_protmethodMemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.(Geerbt von „Object“.)

System_CAPS_pubmethodToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.(Geerbt von „Object“.)

Ein ObjRef ist eine serialisierbare Darstellung eines Objekts, das erweitert MarshalByRefObject (MBR). Ein ObjRef Dient zum Übertragen eines Objektverweises über eine AppDomain Grenze. Erstellen einer ObjRef für ein Objekt als Marshallen bezeichnet wird. Sie erstellen eine ObjRef (Marshallen ein MarshalByRefObject) entweder explizit durch die Registrierung des MBR Objekt mit der Remotinginfrastruktur (finden Sie unter RemotingConfiguration und RemotingServices.Marshal), oder implizit, indem Sie beim Aufruf eines Remoteobjekts ein MBR-Objekt als Parameter übergeben. Remoting verwendet ObjRef Objekte zum Speichern und übertragen alle relevanten Informationen über die MarshalByRefObject Remote.

Die ObjRef enthält Informationen über die Type und die Klasse des Objekts gemarshallt werden, seine Position und Kommunikation bezogene Informationen zum t erreichen, wo sich das Objekt befindet.

Nach der Implementierung einer Klasse MarshalByRefObject gemarshallt, der ObjRef die darstellt, die sie in einer anderen Anwendungsdomäne, möglicherweise in einem anderen Prozess oder Computer über einen Kanal übertragen. Wenn die ObjRef deserialisiert (finden Sie unter XML- und SOAP-Serialisierung) in der Zielanwendungsdomäne, wird Sie analysiert, um einen transparenten Proxy für das remote MBR-Objekt zu erstellen. Dieser Vorgang wird als Methodeninformationen bezeichnet.

Ein transparenter Proxy ist ein Objekt, das den Anschein erweckt, dass das eigentliche Objekt auf dem Client befindet. Er erreicht dies durch Aufrufe auf das eigentliche Objekt über die Remotinginfrastruktur weiterleiten. Transparente Proxy ist selbst untergebracht, die von einer Instanz einer verwalteten Laufzeitklasse vom Typ RealProxy. Die RealProxy implementiert einen Teil der Funktionen zum Weiterleiten der Vorgänge vom transparenten Proxy erforderlich sind.

Ein Proxyobjekt kann verwendet werden, ohne Berücksichtigung von Remote-Untereinheiten innerhalb einer AppDomain. Clientanwendungen müssen Proxy Verweise und Objektverweisen nicht unterscheiden. Jedoch müssen Dienstanbieter Probleme wie z. B. die Aktivierung, Verwaltung der Objektlebensdauer und Transaktionen solche Unterschiede machen.

Diese Klasse stellt einen Linkaufruf und einer vererbungsanforderung auf Klassenebene. Ein SecurityException wird ausgelöst, wenn der direkte Aufrufer oder die abgeleitete Klasse keine Berechtigung für die Infrastruktur verfügt. Informationen zu Sicherheitsberechtigungen finden Sie unter Link Demands und Vererbungsanforderungen.

Das folgende Codebeispiel veranschaulicht die Verwendung eines benutzerdefinierten ObjRef. Den Aktivierungscode anzeigen, die die benutzerdefinierte testet ObjRef, finden Sie im Beispiel für die RegisterWellKnownServiceType Methode.

// 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);
   }
}

SecurityPermission

for operating with infrastructure code. Demand value: F:System.Security.Permissions.SecurityAction.LinkDemand; Permission Value: F:System.Security.Permissions.SecurityPermissionFlag.Infrastructure

SecurityPermission

for operating with infrastructure code. Demand value: F:System.Security.Permissions.SecurityAction.InheritanceDemand; Permission Value: F:System.Security.Permissions.SecurityPermissionFlag.Infrastructure

.NET Framework
Verfügbar seit 1.1

Alle öffentlichen statischen Member ( Shared in Visual Basic) dieses Typs sind threadsicher. Die Threadsicherheit für Instanzmember ist nicht garantiert.

Zurück zum Anfang
Anzeigen: