Sdílet prostřednictvím


RemotingServices.Marshal Metoda

Definice

Převede danou MarshalByRefObject instanci ObjRef třídy, která může být serializována pro přenos mezi doménami aplikace a přes síť.

Přetížení

Marshal(MarshalByRefObject)

Vezme objekt MarshalByRefObject, zaregistruje ho v infrastruktuře vzdálené komunikace a převede ho ObjRef na instanci třídy .

Marshal(MarshalByRefObject, String)

Převede danou MarshalByRefObject hodnotu na instanci ObjRef třídy se zadaným identifikátorem URI.

Marshal(MarshalByRefObject, String, Type)

MarshalByRefObject Vezme a převede ho ObjRef na instanci třídy se zadaným identifikátorem URI a zadaným Typeidentifikátorem .

Marshal(MarshalByRefObject)

Vezme objekt MarshalByRefObject, zaregistruje ho v infrastruktuře vzdálené komunikace a převede ho ObjRef na instanci třídy .

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

Parametry

Obj
MarshalByRefObject

Převáděný objekt

Návraty

Instance ObjRef třídy, která představuje objekt zadaný v parametru Obj .

Výjimky

Parametr Obj je proxy objektu.

Alespoň jeden z volajících, kteří jsou výše v kanálu volání, nemá oprávnění ke konfiguraci typů vzdálené komunikace a kanálů.

Poznámky

A ObjRef je serializovatelná reprezentace objektu, který se používá k přenosu odkazu na objekt přes hranice domény aplikace. Vytvoření objektu ObjRef pro objekt se označuje jako zařazování. Je ObjRef možné ho přenést prostřednictvím kanálu do jiné domény aplikace (případně na jiný proces nebo počítač). Jakmile jste v jiné doméně aplikace, ObjRef musí se analyzovat, aby se pro objekt vytvořil proxy server, který je obecně připojený ke skutečnému objektu. Tato operace se označuje jako zrušení ohraničení.

Obsahuje ObjRef informace, které popisují Type a třídu zařazovaného objektu, identifikátor URI, který jednoznačně identifikuje konkrétní instanci objektu, a informace související s komunikací o tom, jak se dostat k dílčímu dělení vzdálené komunikace, kde je objekt umístěn.

Během zařazování se používá kontext z aktuálního vlákna, nikoli kontext, který byl aktivní při vytvoření objektu. Pokud nebyl identifikátor URI explicitně nastaven metodou SetObjectUriForMarshal , automaticky se vygeneruje infrastrukturou vzdálené komunikace identity.

Identifikátor URI nelze přidružit k proxy serveru z jednoho ze dvou důvodů: identifikátor URI se vygeneroval na straně serveru pro objekt, který představuje, nebo je objekt dobře známý. V takovém případě je identifikátor URI známý. Z tohoto důvodu platí, že pokud Obj je parametrem proxy, vyvolá se výjimka. U vlastních proxy serverů je toto omezení uvolněné, protože transparentní proxy server je považován za objekt serveru.

Viz také

Platí pro

Marshal(MarshalByRefObject, String)

Převede danou MarshalByRefObject hodnotu na instanci ObjRef třídy se zadaným identifikátorem URI.

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

Parametry

Obj
MarshalByRefObject

Převáděný objekt

URI
String

Zadaný identifikátor URI, pomocí kterého se má inicializovat nový ObjRefidentifikátor . Může být null.

Návraty

Instance ObjRef třídy, která představuje objekt zadaný v parametru Obj .

Výjimky

Obj je proxy objektu URI a parametr není null.

Alespoň jeden z volajících, kteří jsou výše v kanálu volání, nemá oprávnění ke konfiguraci typů vzdálené komunikace a kanálů.

Příklady

Následující příklad kódu ukazuje, jak použít aktuální Marshal metodu k zařazování zadaného objektu.

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()

Poznámky

A ObjRef je serializovatelná reprezentace objektu, který se používá k přenosu odkazu na objekt přes hranice domény aplikace. Vytvoření objektu ObjRef pro objekt se označuje jako zařazování. Je ObjRef možné ho přenést prostřednictvím kanálu do jiné domény aplikace (případně na jiný proces nebo počítač). Jakmile jste v jiné doméně aplikace, ObjRef musí se analyzovat, aby se pro objekt vytvořil proxy server, který je obecně připojený ke skutečnému objektu. Tato operace se označuje jako zrušení ohraničení.

Obsahuje ObjRef informace, které popisují Type a třídu zařazovaného objektu, identifikátor URI, který jednoznačně identifikuje konkrétní instanci objektu, a informace související s komunikací o tom, jak se dostat k dílčímu dělení vzdálené komunikace, kde je objekt umístěn.

Během zařazování se používá kontext z aktuálního vlákna, nikoli kontext, který byl aktivní při vytvoření objektu.

Identifikátor URI nelze přidružit k proxy serveru z jednoho ze dvou důvodů: identifikátor URI se vygeneroval na straně serveru pro objekt, který představuje, nebo je objekt dobře známý. V takovém případě je identifikátor URI známý. Z tohoto důvodu platí, že pokud Obj je parametrem proxy, vyvolá se výjimka. U vlastních proxy serverů je toto omezení uvolněné, protože transparentní proxy server je považován za objekt serveru.

Viz také

Platí pro

Marshal(MarshalByRefObject, String, Type)

MarshalByRefObject Vezme a převede ho ObjRef na instanci třídy se zadaným identifikátorem URI a zadaným Typeidentifikátorem .

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

Parametry

Obj
MarshalByRefObject

Objekt, který se má převést na ObjRef.

ObjURI
String

Identifikátor URI, se kterým je objekt zadaný v parametru Obj , zařazován. Může být null.

RequestedType
Type

Je TypeObj zařazován jako. Může být null.

Návraty

Instance ObjRef třídy, která představuje objekt zadaný v parametru Obj .

Výjimky

Obj je proxy vzdáleného objektu ObjUri a parametr není null.

Alespoň jeden z volajících, kteří jsou výše v kanálu volání, nemá oprávnění ke konfiguraci typů vzdálené komunikace a kanálů.

Poznámky

A ObjRef je serializovatelná reprezentace objektu, který se používá k přenosu odkazu na objekt přes hranice domény aplikace. Vytvoření objektu ObjRef pro objekt se označuje jako zařazování. Je ObjRef možné ho přenést prostřednictvím kanálu do jiné domény aplikace (případně na jiný proces nebo počítač). Jakmile jste v jiné doméně aplikace, ObjRef musí se analyzovat, aby se pro objekt vytvořil proxy server, který je obecně připojený ke skutečnému objektu. Tato operace se označuje jako zrušení ohraničení.

Obsahuje ObjRef informace, které popisují Type a třídu zařazovaného objektu, identifikátor URI, který jednoznačně identifikuje konkrétní instanci objektu, a informace související s komunikací o tom, jak se dostat k dílčímu dělení vzdálené komunikace, kde je objekt umístěn.

Zadaný parametr Type se používá infrastrukturou vzdálené komunikace k omezení rozsahu hierarchie vystavených typů. Pokud je například objekt A odvozen od objektu B, který je odvozen z objektu C, a Marshal je volána, pak klient může přetypovat proxy mezi C a B, ale ne na A.

Během zařazování se používá kontext z aktuálního vlákna, nikoli kontext, který byl aktivní při vytvoření objektu.

Identifikátor URI nelze přidružit k proxy serveru z jednoho ze dvou důvodů: identifikátor URI se vygeneroval na straně serveru pro objekt, který představuje, nebo je objekt dobře známý. V takovém případě je identifikátor URI známý. Z tohoto důvodu platí, že pokud Obj je parametrem proxy, vyvolá se výjimka. U vlastních proxy serverů je toto omezení uvolněné, protože transparentní proxy server je považován za objekt serveru.

Viz také

Platí pro