ObjRef Sınıf

Tanım

Uzak bir nesneyle iletişim kurmak için ara sunucu oluşturmak için gereken tüm ilgili bilgileri depolar.

public ref class ObjRef : System::Runtime::Serialization::IObjectReference, System::Runtime::Serialization::ISerializable
[System.Serializable]
public class ObjRef : System.Runtime.Serialization.IObjectReference, System.Runtime.Serialization.ISerializable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class ObjRef : System.Runtime.Serialization.IObjectReference, System.Runtime.Serialization.ISerializable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Security.SecurityCritical]
public class ObjRef : System.Runtime.Serialization.IObjectReference, System.Runtime.Serialization.ISerializable
[<System.Serializable>]
type ObjRef = class
    interface IObjectReference
    interface ISerializable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ObjRef = class
    interface IObjectReference
    interface ISerializable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Security.SecurityCritical>]
type ObjRef = class
    interface IObjectReference
    interface ISerializable
Public Class ObjRef
Implements IObjectReference, ISerializable
Devralma
ObjRef
Öznitelikler
Uygulamalar

Örnekler

Aşağıdaki kod örneğinde özel ObjRefkullanımı gösterilmektedir. Özel ObjReföğesini test eden etkinleştirme kodunu görüntülemek için yönteminin örneğine RegisterWellKnownServiceType bakın.

// 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
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
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

Açıklamalar

A ObjRef , (MBR) genişleten MarshalByRefObject bir nesnenin seri hale getirilebilir bir gösterimidir. bir ObjRef nesne başvurularını bir sınır boyunca AppDomain aktarmak için kullanılır. Bir nesne için oluşturma ObjRef , hazırlama olarak bilinir. MBR nesnesini uzaktan iletişim altyapısına (bkz. ve RemotingServices.Marshal) kaydederek veya uzak bir nesneyi çağırırken MBR nesnesini parametre olarak geçirerek örtük olarak açıkça bir (sıralama MarshalByRefObjecta) oluşturabilirsiniz ObjRef .RemotingConfiguration Uzaktan iletişim, uzaktan erişimle ilgili MarshalByRefObject tüm bilgileri depolamak ve iletmek için nesneleri kullanırObjRef.

, ObjRef sıralanan nesnenin Type ve sınıfını, tam konumunu ve nesnenin bulunduğu uzaktan iletişim alt bölümüne nasıl erişileceğine ilişkin iletişimle ilgili bilgileri içerir.

Uygulayan MarshalByRefObject bir sınıf sıralandıktan sonra, ObjRef bunu temsil eden bir kanal aracılığıyla başka bir uygulama etki alanına, büyük olasılıkla başka bir işlemde veya bilgisayarda aktarılır. ObjRef hedef uygulama etki alanında seri durumdan çıkarıldığında (bkz. XML ve SOAP Serileştirmesi), uzak MBR nesnesi için saydam bir ara sunucu oluşturmak üzere ayrıştırılır. Bu işlem, özetleme olarak bilinir.

Saydam proxy, gerçek nesnenin istemcinin alanında bulunduğu yanılsamasını sağlayan bir nesnedir. Uzaktan iletişim altyapısını kullanarak üzerinde yapılan çağrıları gerçek nesneye ileterek bunu elde eder. Saydam ara sunucu, türündeki RealProxyyönetilen çalışma zamanı sınıfının bir örneği tarafından barındırılır. saydam RealProxy proxy'den işlemleri iletmek için gereken işlevselliğin bir bölümünü uygular.

Ara sunucu nesnesi, içindeki AppDomainuzaktan iletişim alt bölümlere bakılmaksızın kullanılabilir. Uygulamaların ara sunucu başvuruları ile nesne başvuruları arasında ayrım yapmanız gerekmez. Ancak etkinleştirme, yaşam süresi yönetimi ve işlemler gibi sorunlarla ilgilenen hizmet sağlayıcılarının bu tür ayrımlar yapması gerekir.

Bu sınıf, sınıf düzeyinde bir bağlantı talebi ve devralma talebi oluşturur. Hemen SecurityException çağıranın veya türetilen sınıfın altyapı izni olmadığında bir oluşturulur. Güvenlik talepleri hakkında ayrıntılı bilgi için bkz. Bağlantı Talepleri ve Devralma Talepleri.

Oluşturucular

ObjRef()

ObjRef sınıfının yeni bir örneğini varsayılan değerlerle başlatır.

ObjRef(MarshalByRefObject, Type)

Belirtilen MarshalByRefObjectTypebir öğesine başvurmak için sınıfının yeni bir örneğini ObjRef başlatır.

ObjRef(SerializationInfo, StreamingContext)

Serileştirilmiş verilerden sınıfının yeni bir örneğini ObjRef başlatır.

Özellikler

ChannelInfo

için ObjReföğesini IChannelInfo alır veya ayarlar.

EnvoyInfo

için ObjReföğesini IEnvoyInfo alır veya ayarlar.

TypeInfo

öğesinin tanımladığı ObjRef nesne için öğesini alır veya ayarlarIRemotingTypeInfo.

URI

Belirli nesne örneğinin URI'sini alır veya ayarlar.

Yöntemler

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetObjectData(SerializationInfo, StreamingContext)

Belirtilen SerializationInfo öğesini geçerli ObjRef örneği seri hale getirmek için gereken verilerle doldurur.

GetRealObject(StreamingContext)

öğesinin tanımladığı uzak nesneye ObjRef bir başvuru döndürür.

GetType()

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
IsFromThisAppDomain()

Geçerli örneğin geçerli ObjRef içinde AppDomainbulunan bir nesneye başvurup başvurmadığını gösteren bir Boole değeri döndürür.

IsFromThisProcess()

Geçerli örneğin geçerli ObjRef işlemde bulunan bir nesneye başvurup başvurmadığını gösteren bir Boole değeri döndürür.

MemberwiseClone()

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır

Ayrıca bkz.