RemotingServices.Marshal Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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
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
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
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
.
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.