Freigeben über


RemotingServices.Marshal Methode

Definition

Wandelt die angegebene MarshalByRefObject in eine Instanz der ObjRef-Klasse um, die für die Übertragung zwischen Anwendungsdomänen und über ein Netzwerk serialisiert werden kann.

Überlädt

Marshal(MarshalByRefObject)

Nimmt eine MarshalByRefObject, registriert sie bei der Remotinginfrastruktur und konvertiert sie in eine Instanz der ObjRef Klasse.

Marshal(MarshalByRefObject, String)

Konvertiert die angegebene MarshalByRefObject in eine Instanz der ObjRef Klasse mit dem angegebenen URI.

Marshal(MarshalByRefObject, String, Type)

Übernimmt eine MarshalByRefObject und konvertiert sie in eine Instanz der ObjRef Klasse mit dem angegebenen URI und die bereitgestellte Type.

Marshal(MarshalByRefObject)

Nimmt eine MarshalByRefObject, registriert sie bei der Remotinginfrastruktur und konvertiert sie in eine Instanz der ObjRef Klasse.

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

Parameter

Obj
MarshalByRefObject

Das zu konvertierende Objekt.

Gibt zurück

Eine Instanz der ObjRef Klasse, die das im Obj-Parameter angegebene Objekt darstellt.

Ausnahmen

Der Obj-Parameter ist ein Objektproxy.

Mindestens einer der Anrufer im Callstack verfügt nicht über die Berechtigung zum Konfigurieren von Remotingtypen und Kanälen.

Hinweise

Ein ObjRef ist eine serialisierbare Darstellung eines Objekts, das zum Übertragen eines Objektverweises über eine Anwendungsdomänengrenze hinweg verwendet wird. Das Erstellen einer ObjRef für ein Objekt wird als Marshalling bezeichnet. Die ObjRef können über einen Kanal in eine andere Anwendungsdomäne (möglicherweise auf einem anderen Prozess oder Computer) übertragen werden. Sobald sie sich in der anderen Anwendungsdomäne befinden, muss die ObjRef analysiert werden, um einen Proxy für das Objekt zu erstellen, der im Allgemeinen mit dem realen Objekt verbunden ist. Dieser Vorgang wird als Unmarshaling bezeichnet.

Eine ObjRef enthält Informationen, die die Type und Klasse des Objekts beschreiben, das gemarstet wird, einen URI, der die spezifische Objektinstanz eindeutig identifiziert, und Kommunikationsinformationen darüber, wie sie die Remotingunterteilung erreichen, in der sich das Objekt befindet.

Während des Marshallings wird der Kontext aus dem aktuellen Thread verwendet, nicht der Kontext, der beim Erstellen des Objekts aktiv war. Wenn ein URI nicht explizit von der SetObjectUriForMarshal-Methode festgelegt wurde, wird er automatisch von der Remoting-Identitätsinfrastruktur generiert.

Sie können einen URI einem Proxy aus zwei Gründen nicht zuordnen: Entweder wurde der URI auf der Serverseite für das objekt generiert, das es darstellt, oder das Objekt ist bekannt, in diesem Fall ist der URI bekannt. Aus diesem Grund wird eine Ausnahme ausgelöst, wenn der parameter Obj ein Proxy ist. Bei benutzerdefinierten Proxys ist diese Einschränkung entspannt, da der transparente Proxy als Serverobjekt behandelt wird.

Weitere Informationen

Gilt für:

Marshal(MarshalByRefObject, String)

Konvertiert die angegebene MarshalByRefObject in eine Instanz der ObjRef Klasse mit dem angegebenen 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

Parameter

Obj
MarshalByRefObject

Das zu konvertierende Objekt.

URI
String

Der angegebene URI, mit dem die neue ObjRefinitialisiert werden soll. Kann nullwerden.

Gibt zurück

Eine Instanz der ObjRef Klasse, die das im Obj-Parameter angegebene Objekt darstellt.

Ausnahmen

Obj ist ein Objektproxy, und der parameter URI ist nicht null.

Mindestens einer der Anrufer im Callstack verfügt nicht über die Berechtigung zum Konfigurieren von Remotingtypen und Kanälen.

Beispiele

Im folgenden Codebeispiel wird die Verwendung der aktuellen Marshal-Methode zum Marshallen eines angegebenen Objekts veranschaulicht.

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

Hinweise

Ein ObjRef ist eine serialisierbare Darstellung eines Objekts, das zum Übertragen eines Objektverweises über eine Anwendungsdomänengrenze hinweg verwendet wird. Das Erstellen einer ObjRef für ein Objekt wird als Marshalling bezeichnet. Die ObjRef können über einen Kanal in eine andere Anwendungsdomäne (möglicherweise auf einem anderen Prozess oder Computer) übertragen werden. Sobald sie sich in der anderen Anwendungsdomäne befinden, muss die ObjRef analysiert werden, um einen Proxy für das Objekt zu erstellen, der im Allgemeinen mit dem realen Objekt verbunden ist. Dieser Vorgang wird als Unmarshaling bezeichnet.

Eine ObjRef enthält Informationen, die die Type und Klasse des Objekts beschreiben, das gemarstet wird, einen URI, der die spezifische Objektinstanz eindeutig identifiziert, und Kommunikationsinformationen darüber, wie sie die Remotingunterteilung erreichen, in der sich das Objekt befindet.

Während des Marshallings wird der Kontext aus dem aktuellen Thread verwendet, nicht der Kontext, der beim Erstellen des Objekts aktiv war.

Sie können einen URI einem Proxy aus zwei Gründen nicht zuordnen: Entweder wurde der URI auf der Serverseite für das objekt generiert, das es darstellt, oder das Objekt ist bekannt, in diesem Fall ist der URI bekannt. Aus diesem Grund wird eine Ausnahme ausgelöst, wenn der parameter Obj ein Proxy ist. Bei benutzerdefinierten Proxys ist diese Einschränkung entspannt, da der transparente Proxy als Serverobjekt behandelt wird.

Weitere Informationen

Gilt für:

Marshal(MarshalByRefObject, String, Type)

Übernimmt eine MarshalByRefObject und konvertiert sie in eine Instanz der ObjRef Klasse mit dem angegebenen URI und die bereitgestellte Type.

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

Parameter

Obj
MarshalByRefObject

Das Objekt, das in eine ObjRefkonvertiert werden soll.

ObjURI
String

Der URI, mit dem das im Obj-Parameter angegebene Objekt gemarstet wird. Kann nullwerden.

RequestedType
Type

Die TypeObj wird gemarstet wie. Kann nullwerden.

Gibt zurück

Eine Instanz der ObjRef Klasse, die das im Obj-Parameter angegebene Objekt darstellt.

Ausnahmen

Obj ist ein Proxy eines Remoteobjekts, und der parameter ObjUri ist nicht null.

Mindestens einer der Anrufer im Callstack verfügt nicht über die Berechtigung zum Konfigurieren von Remotingtypen und Kanälen.

Hinweise

Ein ObjRef ist eine serialisierbare Darstellung eines Objekts, das zum Übertragen eines Objektverweises über eine Anwendungsdomänengrenze hinweg verwendet wird. Das Erstellen einer ObjRef für ein Objekt wird als Marshalling bezeichnet. Die ObjRef können über einen Kanal in eine andere Anwendungsdomäne (möglicherweise auf einem anderen Prozess oder Computer) übertragen werden. Sobald sie sich in der anderen Anwendungsdomäne befinden, muss die ObjRef analysiert werden, um einen Proxy für das Objekt zu erstellen, der im Allgemeinen mit dem realen Objekt verbunden ist. Dieser Vorgang wird als Unmarshaling bezeichnet.

Eine ObjRef enthält Informationen, die die Type und Klasse des Objekts beschreiben, das gemarstet wird, einen URI, der die spezifische Objektinstanz eindeutig identifiziert, und Kommunikationsinformationen darüber, wie sie die Remotingunterteilung erreichen, in der sich das Objekt befindet.

Die angegebene Type wird von der Remotinginfrastruktur verwendet, um den Umfang der verfügbar gemachten Typhierarchie einzuschränken. Wenn z. B. Objekt A von Objekt B abgeleitet ist, das von Objekt C abgeleitet wird und Marshal aufgerufen wird, kann der Client den Proxy zwischen C und B umwandeln, aber nicht in A.

Während des Marshallings wird der Kontext aus dem aktuellen Thread verwendet, nicht der Kontext, der beim Erstellen des Objekts aktiv war.

Sie können einen URI einem Proxy aus zwei Gründen nicht zuordnen: Entweder wurde der URI auf der Serverseite für das objekt generiert, das es darstellt, oder das Objekt ist bekannt, in diesem Fall ist der URI bekannt. Aus diesem Grund wird eine Ausnahme ausgelöst, wenn der parameter Obj ein Proxy ist. Bei benutzerdefinierten Proxys ist diese Einschränkung entspannt, da der transparente Proxy als Serverobjekt behandelt wird.

Weitere Informationen

Gilt für: