Condividi tramite


RemotingServices.Marshal Metodo

Definizione

Converte il MarshalByRefObject specificato in un'istanza della classe ObjRef, che può essere serializzata per la trasmissione tra domini applicazione e su una rete.

Overload

Marshal(MarshalByRefObject)

Accetta un MarshalByRefObject, lo registra con l'infrastruttura remota e lo converte in un'istanza della classe ObjRef.

Marshal(MarshalByRefObject, String)

Converte il MarshalByRefObject specificato in un'istanza della classe ObjRef con l'URI specificato.

Marshal(MarshalByRefObject, String, Type)

Accetta un MarshalByRefObject e lo converte in un'istanza della classe ObjRef con l'URI specificato e il Typefornito.

Marshal(MarshalByRefObject)

Accetta un MarshalByRefObject, lo registra con l'infrastruttura remota e lo converte in un'istanza della classe ObjRef.

public:
 static System::Runtime::Remoting::ObjRef ^ Marshal(MarshalByRefObject ^ Obj);
public static System.Runtime.Remoting.ObjRef Marshal (MarshalByRefObject Obj);
static member Marshal : MarshalByRefObject -> System.Runtime.Remoting.ObjRef
Public Shared Function Marshal (Obj As MarshalByRefObject) As ObjRef

Parametri

Obj
MarshalByRefObject

Oggetto da convertire.

Restituisce

Istanza della classe ObjRef che rappresenta l'oggetto specificato nel parametro Obj.

Eccezioni

Il parametro Obj è un proxy oggetto.

Almeno uno dei chiamanti più in alto nello stack di chiamate non dispone dell'autorizzazione per configurare tipi e canali remoti.

Commenti

Un ObjRef è una rappresentazione serializzabile di un oggetto usato per trasferire un riferimento a un oggetto attraverso un limite di dominio applicazione. La creazione di un ObjRef per un oggetto è nota come marshalling. Il ObjRef può essere trasferito tramite un canale in un altro dominio applicazione (possibilmente in un altro processo o computer). Una volta nell'altro dominio applicazione, il ObjRef deve essere analizzato per creare un proxy per l'oggetto, in genere connesso all'oggetto reale. Questa operazione è nota come unmarshaling.

Un ObjRef contiene informazioni che descrivono l'Type e la classe dell'oggetto sottoposto a marshalling, un URI che identifica in modo univoco l'istanza dell'oggetto specifica e le informazioni correlate alla comunicazione su come raggiungere la suddivisione remota in cui si trova l'oggetto.

Durante il marshalling, viene usato il contesto del thread corrente, non il contesto attivo al momento della creazione dell'oggetto. Se un URI non è stato impostato in modo esplicito dal metodo SetObjectUriForMarshal, viene generato automaticamente dall'infrastruttura di identità remota.

Non è possibile associare un URI a un proxy per uno dei due motivi seguenti: l'URI è stato generato sul lato server per l'oggetto rappresentato oppure l'oggetto è noto, nel qual caso l'URI è noto. Per questo motivo, se il parametro Obj è un proxy, verrà generata un'eccezione. Per i proxy personalizzati questa restrizione è rilassata perché il proxy trasparente viene considerato come oggetto server.

Vedi anche

Si applica a

Marshal(MarshalByRefObject, String)

Converte il MarshalByRefObject specificato in un'istanza della classe ObjRef con l'URI specificato.

public:
 static System::Runtime::Remoting::ObjRef ^ Marshal(MarshalByRefObject ^ Obj, System::String ^ URI);
public static System.Runtime.Remoting.ObjRef Marshal (MarshalByRefObject Obj, string URI);
static member Marshal : MarshalByRefObject * string -> System.Runtime.Remoting.ObjRef
Public Shared Function Marshal (Obj As MarshalByRefObject, URI As String) As ObjRef

Parametri

Obj
MarshalByRefObject

Oggetto da convertire.

URI
String

URI specificato con cui inizializzare il nuovo ObjRef. Può essere null.

Restituisce

Istanza della classe ObjRef che rappresenta l'oggetto specificato nel parametro Obj.

Eccezioni

Obj è un proxy oggetto e il parametro URI non è null.

Almeno uno dei chiamanti più in alto nello stack di chiamate non dispone dell'autorizzazione per configurare tipi e canali remoti.

Esempio

Nell'esempio di codice seguente viene illustrato come utilizzare il metodo Marshal corrente per effettuare il marshalling di un oggetto specificato.

TcpChannel^ channel = gcnew TcpChannel( 9000 );
ChannelServices::RegisterChannel( channel );
SampleWellKnown ^ objectWellKnown = gcnew SampleWellKnown;

// After the channel is registered, the Object* needs to be registered
// with the remoting infrastructure.  So, Marshal is called.
ObjRef^ objrefWellKnown = RemotingServices::Marshal( objectWellKnown, "objectWellKnownUri" );
Console::WriteLine( "An instance of SampleWellKnown type is published at {0}.", objrefWellKnown->URI );
Console::WriteLine( "Press enter to unregister SampleWellKnown, so that it is no longer available on this channel." );
Console::ReadLine();
RemotingServices::Disconnect( objectWellKnown );
Console::WriteLine( "Press enter to end the server process." );
Console::ReadLine();
TcpChannel channel = new TcpChannel(9000);
ChannelServices.RegisterChannel(channel);

SampleWellKnown objectWellKnown = new SampleWellKnown();

// After the channel is registered, the object needs to be registered
// with the remoting infrastructure.  So, Marshal is called.
ObjRef objrefWellKnown = RemotingServices.Marshal(objectWellKnown, "objectWellKnownUri");
Console.WriteLine("An instance of SampleWellKnown type is published at {0}.", objrefWellKnown.URI);

Console.WriteLine("Press enter to unregister SampleWellKnown, so that it is no longer available on this channel.");
Console.ReadLine();
RemotingServices.Disconnect(objectWellKnown);

Console.WriteLine("Press enter to end the server process.");
Console.ReadLine();
Dim channel As New TcpChannel(9000)
ChannelServices.RegisterChannel(channel)

Dim objectWellKnown As New SampleWellKnown()
' After the channel is registered, the object needs to be registered
' with the remoting infrastructure.  So, Marshal is called.
Dim objrefWellKnown As ObjRef = RemotingServices.Marshal(objectWellKnown, "objectWellKnownUri")
Console.WriteLine("An instance of SampleWellKnown type is published at {0}.", objrefWellKnown.URI)

Console.WriteLine("Press enter to unregister SampleWellKnown, so that it is no longer available on this channel.")
Console.ReadLine()
RemotingServices.Disconnect(objectWellKnown)
Console.WriteLine("Press enter to end the server process.")
Console.ReadLine()

Commenti

Un ObjRef è una rappresentazione serializzabile di un oggetto usato per trasferire un riferimento a un oggetto attraverso un limite di dominio applicazione. La creazione di un ObjRef per un oggetto è nota come marshalling. Il ObjRef può essere trasferito tramite un canale in un altro dominio applicazione (possibilmente in un altro processo o computer). Una volta nell'altro dominio applicazione, il ObjRef deve essere analizzato per creare un proxy per l'oggetto, in genere connesso all'oggetto reale. Questa operazione è nota come unmarshaling.

Un ObjRef contiene informazioni che descrivono l'Type e la classe dell'oggetto sottoposto a marshalling, un URI che identifica in modo univoco l'istanza dell'oggetto specifica e le informazioni correlate alla comunicazione su come raggiungere la suddivisione remota in cui si trova l'oggetto.

Durante il marshalling, viene usato il contesto del thread corrente, non il contesto attivo al momento della creazione dell'oggetto.

Non è possibile associare un URI a un proxy per uno dei due motivi seguenti: l'URI è stato generato sul lato server per l'oggetto rappresentato oppure l'oggetto è noto, nel qual caso l'URI è noto. Per questo motivo, se il parametro Obj è un proxy, verrà generata un'eccezione. Per i proxy personalizzati questa restrizione è rilassata perché il proxy trasparente viene considerato come oggetto server.

Vedi anche

Si applica a

Marshal(MarshalByRefObject, String, Type)

Accetta un MarshalByRefObject e lo converte in un'istanza della classe ObjRef con l'URI specificato e il Typefornito.

public:
 static System::Runtime::Remoting::ObjRef ^ Marshal(MarshalByRefObject ^ Obj, System::String ^ ObjURI, Type ^ RequestedType);
public static System.Runtime.Remoting.ObjRef Marshal (MarshalByRefObject Obj, string ObjURI, Type RequestedType);
static member Marshal : MarshalByRefObject * string * Type -> System.Runtime.Remoting.ObjRef
Public Shared Function Marshal (Obj As MarshalByRefObject, ObjURI As String, RequestedType As Type) As ObjRef

Parametri

Obj
MarshalByRefObject

Oggetto da convertire in un ObjRef.

ObjURI
String

L'URI con cui viene eseguito il marshalling dell'oggetto specificato nel parametro Obj. Può essere null.

RequestedType
Type

Il TypeObj viene sottoposto a marshalling come . Può essere null.

Restituisce

Istanza della classe ObjRef che rappresenta l'oggetto specificato nel parametro Obj.

Eccezioni

Obj è un proxy di un oggetto remoto e il parametro ObjUri non è null.

Almeno uno dei chiamanti più in alto nello stack di chiamate non dispone dell'autorizzazione per configurare tipi e canali remoti.

Commenti

Un ObjRef è una rappresentazione serializzabile di un oggetto usato per trasferire un riferimento a un oggetto attraverso un limite di dominio applicazione. La creazione di un ObjRef per un oggetto è nota come marshalling. Il ObjRef può essere trasferito tramite un canale in un altro dominio applicazione (possibilmente in un altro processo o computer). Una volta nell'altro dominio applicazione, il ObjRef deve essere analizzato per creare un proxy per l'oggetto, in genere connesso all'oggetto reale. Questa operazione è nota come unmarshaling.

Un ObjRef contiene informazioni che descrivono l'Type e la classe dell'oggetto sottoposto a marshalling, un URI che identifica in modo univoco l'istanza dell'oggetto specifica e le informazioni correlate alla comunicazione su come raggiungere la suddivisione remota in cui si trova l'oggetto.

Il Type specificato viene usato dall'infrastruttura remota per limitare l'ambito della gerarchia dei tipi esposti. Ad esempio, se l'oggetto A deriva dall'oggetto B, che deriva dall'oggetto C e Marshal viene chiamato, il client può eseguire il cast del proxy tra C e B ma non a A.

Durante il marshalling, viene usato il contesto del thread corrente, non il contesto attivo al momento della creazione dell'oggetto.

Non è possibile associare un URI a un proxy per uno dei due motivi seguenti: l'URI è stato generato sul lato server per l'oggetto rappresentato oppure l'oggetto è noto, nel qual caso l'URI è noto. Per questo motivo, se il parametro Obj è un proxy, verrà generata un'eccezione. Per i proxy personalizzati questa restrizione è rilassata perché il proxy trasparente viene considerato come oggetto server.

Vedi anche

Si applica a