ObjRef Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Memorizza tutte le informazioni rilevanti richieste per generare un proxy allo scopo di comunicare con un oggetto remoto.
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
- Ereditarietà
-
ObjRef
- Attributi
- Implementazioni
Esempio
Nell'esempio di codice seguente viene illustrato l'uso di un oggetto personalizzato ObjRef. Per visualizzare il codice di attivazione che verifica l'oggetto personalizzato ObjRef, vedere l'esempio per il RegisterWellKnownServiceType metodo .
// 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
Commenti
Un ObjRef oggetto è una rappresentazione serializzabile di un oggetto che estende MarshalByRefObject (MBR). Viene ObjRef usato per trasferire un riferimento a un oggetto attraverso un AppDomain limite. La creazione di un ObjRef oggetto è nota come marshalling. È possibile creare un ObjRef oggetto (marshallal a MarshalByRefObject) in modo esplicito, registrando l'oggetto MBR con l'infrastruttura remota (vedere RemotingConfiguration e ) RemotingServices.Marshalo implicitamente, passando un oggetto MBR come parametro quando si chiama un oggetto remoto. La comunicazione remota usa ObjRef oggetti per archiviare e trasmettere tutte le informazioni pertinenti sull'oggetto MarshalByRefObject remoto.
Contiene ObjRef informazioni che descrivono la Type classe e dell'oggetto in fase di marshalling, la posizione esatta e le informazioni correlate alla comunicazione su come raggiungere la suddivisione remota in cui si trova l'oggetto.
Dopo aver eseguito MarshalByRefObject il marshalling di una classe, l'oggetto ObjRef che rappresenta viene trasferito tramite un canale in un altro dominio dell'applicazione, eventualmente in un altro processo o computer. Quando l'oggetto ObjRef viene deserializzato (vedere SERIALIZZAZIONE XML e SOAP) nel dominio dell'applicazione di destinazione, viene analizzato per creare un proxy trasparente per l'oggetto MBR remoto. Questa operazione è nota come unmarshaling.
Un proxy trasparente è un oggetto che fornisce l'illusione che l'oggetto effettivo si trovi nello spazio del client. Ottiene questo risultato inoltrando le chiamate effettuate all'oggetto reale usando l'infrastruttura di comunicazione remota. Il proxy trasparente è ospitato da un'istanza di una classe di runtime gestita di tipo RealProxy. Implementa RealProxy una parte della funzionalità necessaria per inoltrare le operazioni dal proxy trasparente.
Un oggetto proxy può essere usato senza considerare eventuali suddivisioni remoti all'interno di un AppDomainoggetto . Le applicazioni non devono distinguere tra riferimenti proxy e riferimenti a oggetti. Tuttavia, i provider di servizi che gestiscono problemi come l'attivazione, la gestione della durata e le transazioni devono apportare tali distinzione.
Questa classe rende una richiesta di collegamento e una richiesta di ereditarietà a livello di classe. Viene SecurityException generato quando il chiamante immediato o la classe derivata non dispone dell'autorizzazione dell'infrastruttura. Per informazioni dettagliate sulle richieste di sicurezza, vedere Collegare richieste e richieste di ereditarietà.
Costruttori
ObjRef() |
Inizializza una nuova istanza della classe ObjRef con i valori predefiniti. |
ObjRef(MarshalByRefObject, Type) |
Inizializza una nuova istanza della classe ObjRef per fare riferimento a un oggetto MarshalByRefObject con un Type specificato. |
ObjRef(SerializationInfo, StreamingContext) |
Inizializza una nuova istanza della classe ObjRef dai dati serializzati. |
Proprietà
ChannelInfo |
Ottiene o imposta l'oggetto IChannelInfo per ObjRef. |
EnvoyInfo |
Ottiene o imposta l'oggetto IEnvoyInfo per ObjRef. |
TypeInfo |
Ottiene o imposta l'interfaccia IRemotingTypeInfo per l'oggetto descritto da ObjRef. |
URI |
Ottiene o imposta l'URI dell'istanza dell'oggetto specifico. |
Metodi
Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
GetObjectData(SerializationInfo, StreamingContext) |
Popola un oggetto SerializationInfo specificato con tutti i dati necessari per serializzare l'istanza corrente di ObjRef. |
GetRealObject(StreamingContext) |
Restituisce un riferimento all'oggetto remoto descritto dall'oggetto ObjRef. |
GetType() |
Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) |
IsFromThisAppDomain() |
Restituisce un valore Boolean che indica se l'istanza corrente della classe ObjRef fa riferimento a un oggetto presente nella classe AppDomain corrente. |
IsFromThisProcess() |
Restituisce un valore Boolean che indica se l'istanza corrente della classe ObjRef fa riferimento a un oggetto presente nel processo corrente. |
MemberwiseClone() |
Crea una copia superficiale dell'oggetto Object corrente. (Ereditato da Object) |
ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |