War diese Seite hilfreich?
Ihr Feedback ist uns wichtig. Teilen Sie uns Ihre Meinung mit.
Weiteres Feedback?
1500 verbleibende Zeichen
Exportieren (0) Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

ObjRef-Klasse

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

System.Object
  System.Runtime.Remoting.ObjRef

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

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

Der ObjRef-Typ macht die folgenden Member verfügbar.

  NameBeschreibung
Öffentliche MethodeObjRef()Initialisiert eine neue Instanz der ObjRef-Klasse mit Standardwerten.
Öffentliche MethodeObjRef(MarshalByRefObject, Type)Initialisiert eine neue Instanz der ObjRef-Klasse, um auf ein angegebenes MarshalByRefObject eines angegebenen Type zu verweisen.
Geschützte MethodeObjRef(SerializationInfo, StreamingContext)Initialisiert eine neue Instanz der ObjRef-Klasse mit serialisierten Daten.
Zum Seitenanfang

  NameBeschreibung
Öffentliche EigenschaftChannelInfoRuft die IChannelInfo für die ObjRef ab oder legt diese fest.
Öffentliche EigenschaftEnvoyInfoRuft die IEnvoyInfo für die ObjRef ab oder legt diese fest.
Öffentliche EigenschaftTypeInfoRuft die IRemotingTypeInfo für das Objekt ab, das ObjRef beschreibt, oder legt diese fest.
Öffentliche EigenschaftURIRuft den URI der angegebenen Objektinstanz ab oder legt diesen fest.
Zum Seitenanfang

  NameBeschreibung
Öffentliche MethodeEquals(Object)Bestimmt, ob das angegebene Objekt mit dem aktuellen Objekt identisch ist. (Von Object geerbt.)
Geschützte MethodeFinalize Gibt einem Objekt Gelegenheit, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor es von der Garbage Collection freigegeben wird. (Von Object geerbt.)
Öffentliche MethodeGetHashCodeFungiert als die Standardhashfunktion. (Von Object geerbt.)
Öffentliche MethodeGetObjectDataFüllt eine angegebene SerializationInfo mit den Daten aus, die für die Serialisierung der aktuellen ObjRef-Instanz erforderlich sind.
Öffentliche MethodeGetRealObjectGibt einen Verweis auf das von ObjRef beschriebene Remoteobjekt zurück.
Öffentliche MethodeGetTypeRuft den Type der aktuellen Instanz ab. (Von Object geerbt.)
Öffentliche MethodeIsFromThisAppDomainGibt einen booleschen Wert zurück, der angibt, ob die aktuelle ObjRef-Instanz auf ein Objekt verweist, das sich in der aktuellen AppDomain befindet.
Öffentliche MethodeIsFromThisProcessGibt einen booleschen Wert zurück, der angibt, ob die aktuelle ObjRef-Instanz auf ein Objekt verweist, das sich im aktuellen Prozess befindet.
Geschützte MethodeMemberwiseCloneErstellt eine flache Kopie des aktuellen Object. (Von Object geerbt.)
Öffentliche MethodeToStringGibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Von Object geerbt.)
Zum Seitenanfang

ObjRef ist eine serialisierbare Darstellung eines Objekts, das MarshalByRefObject (MBR) erweitert. ObjRef wird zum Übertragen eines Objektverweises über eine AppDomain-Grenze verwendet. Das Erstellen einer ObjRef für ein Objekt wird als Marshallen bezeichnet. Sie können eine ObjRef entweder explizit erstellen (MarshalByRefObject marshallen), indem Sie das MBR-Objekt mit der Remotinginfrastruktur registrieren (siehe RemotingConfiguration und RemotingServices.Marshal), oder implizit, indem Sie beim Aufruf eines Remoteobjekts ein MBR-Objekt als Parameter übergeben. Beim Remoting werden ObjRef-Objekte zum Speichern und Übertragen aller relevanten Informationen über das MarshalByRefObject verwendet, das remote zur Verfügung gestellt werden soll.

Die ObjRef enthält Informationen über Type und Klasse des gemarshallten Objekts, den exakten Speicherort und kommunikationsbezogene Informationen über den Zugriff auf die Remoteuntereinheit, in der sich das Objekt befindet.

Wenn eine Klasse, die MarshalByRefObject implementiert, gemarshallt wurde, wird die diese Klasse darstellende ObjRef über einen Channel in eine andere Anwendungsdomäne übertragen, möglicherweise in einen anderen Prozess oder Computer. Wenn die ObjRef in der Zielanwendungsdomäne deserialisiert wurde (siehe XML- und SOAP-Serialisierung), wird sie analysiert, um einen transparenten Proxy für das remote MBR-Objekt zu erstellen. Dieser Vorgang wird als Unmarshalling bezeichnet.

Ein transparenter Proxy ist ein Objekt, das den Anschein erweckt, dass sich das eigentliche Objekt im Clientbereich befindet. Dies wird dadurch erreicht, dass der Proxy an ihn gerichtete Aufrufe über die Remotinginfrastruktur an das eigentliche Objekt weiterleitet. Der transparente Proxy wiederum enthält eine Instanz einer verwalteten Laufzeitklasse vom Typ RealProxy. RealProxy implementiert einen Teil der Funktionen, die zum Weiterleiten der Operationen vom transparenten Proxy erforderlich sind.

Ein Proxyobjekt kann ohne Berücksichtigung der Remoteuntereinheiten in einer AppDomain verwendet werden. Anwendungen müssen nicht zwischen Proxy- und Objektverweisen unterscheiden. Für Dienstanbieter aus Bereichen wie Aktivierung, Lebensdauerverwaltung und Transaktionen sind solche Unterscheidungen jedoch erforderlich.

Diese Klasse führt einen Linkaufruf und eine Vererbungsanforderung auf der Klassenebene aus. Eine SecurityException wird ausgelöst, wenn der direkte Aufrufer bzw. die abgeleitete Klasse nicht über die Berechtigung für die Infrastruktur verfügen. Ausführliche Informationen über Sicherheitsanforderungen finden Sie unter Verknüpfungsaufrufe und Vererbungsforderungen.

Im folgenden Codebeispiel wird die Verwendung einer benutzerdefinierten ObjRef veranschaulicht. Den Aktivierungscode zum Testen der benutzerdefinierten 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);
   }
}


.NET Framework

Unterstützt in: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Unterstützt in: 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 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2015 Microsoft