ObjRef Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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) |