RemotingServices.Marshal Methode

Definition

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

Überlädt

Marshal(MarshalByRefObject)

Übernimmt ein MarshalByRefObject, registriert dieses in der Remotinginfrastruktur und konvertiert es in eine Instanz der ObjRef-Klasse.

Marshal(MarshalByRefObject, String)

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

Marshal(MarshalByRefObject, String, Type)

Übernimmt ein MarshalByRefObject und konvertiert dieses in eine Instanz der ObjRef-Klasse mit dem angegebenen URI und dem angegebenen Type.

Marshal(MarshalByRefObject)

Übernimmt ein MarshalByRefObject, registriert dieses in der Remotinginfrastruktur und konvertiert es 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 Aufrufer an höherer Position im Aufrufstapel verfügt nicht über die Berechtigung zum Konfigurieren von Remotetypen und Channels.

Hinweise

Ein ObjRef ist eine serialisierbare Darstellung eines Objekts, das verwendet wird, um einen Objektverweis über eine Anwendungsdomänengrenze zu übertragen. Das Erstellen eines ObjRef für ein Objekt wird als Marshalling bezeichnet. Kann ObjRef ü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 analysiert ObjRef werden, um einen Proxy für das Objekt zu erstellen, der in der Regel mit dem realen Objekt verbunden ist. Dieser Vorgang wird als entmarshaling bezeichnet.

Ein ObjRef enthält Informationen, die die Type - und -Klasse des gemarshallten Objekts, einen URI, der das spezifische Objekt instance eindeutig identifiziert, und Kommunikationsinformationen darüber, wie die Remotingunterteilung erreicht werden kann, 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 Remotingidentitätsinfrastruktur generiert.

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

Weitere Informationen

Gilt für:

Marshal(MarshalByRefObject, String)

Konvertiert das 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 ObjRef initialisiert werden soll. Kann null sein.

Gibt zurück

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

Ausnahmen

Obj ist ein Objektproxy, und der URI-Parameter ist nicht null.

Mindestens einer der Aufrufer an höherer Position im Aufrufstapel verfügt nicht über die Berechtigung zum Konfigurieren von Remotetypen und Channels.

Beispiele

Im folgenden Codebeispiel wird veranschaulicht, wie die aktuelle Marshal Methode verwendet wird, um ein angegebenes Objekt zu marshallen.

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 verwendet wird, um einen Objektverweis über eine Anwendungsdomänengrenze zu übertragen. Das Erstellen eines ObjRef für ein Objekt wird als Marshalling bezeichnet. Kann ObjRef ü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 analysiert ObjRef werden, um einen Proxy für das Objekt zu erstellen, der in der Regel mit dem realen Objekt verbunden ist. Dieser Vorgang wird als entmarshaling bezeichnet.

Ein ObjRef enthält Informationen, die die Type - und -Klasse des gemarshallten Objekts, einen URI, der das spezifische Objekt instance eindeutig identifiziert, und Kommunikationsinformationen darüber, wie die Remotingunterteilung erreicht werden kann, 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 aus einem von zwei Gründen nicht einem Proxy zuordnen: Entweder wurde der URI auf der Serverseite für das Objekt generiert, das es darstellt, oder das Objekt ist allgemein bekannt. In diesem Fall ist der URI bekannt. Aus diesem Grund wird eine Ausnahme ausgelöst, wenn der Obj Parameter ein Proxy ist. Bei benutzerdefinierten Proxys wird diese Einschränkung gelockert, da der transparente Proxy als Serverobjekt behandelt wird.

Weitere Informationen

Gilt für:

Marshal(MarshalByRefObject, String, Type)

Übernimmt ein MarshalByRefObject und konvertiert dieses in eine Instanz der ObjRef-Klasse mit dem angegebenen URI und dem angegebenen 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 in eine ObjRef zu konvertierende Objekt.

ObjURI
String

Der URI, mit dem das im Obj-Parameter angegebene Objekt gemarshallt wird. Kann null sein.

RequestedType
Type

Der Type, als der Obj gemarshallt wird. Kann null sein.

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 ObjUri-Parameter ist nicht null.

Mindestens einer der Aufrufer an höherer Position im Aufrufstapel verfügt nicht über die Berechtigung zum Konfigurieren von Remotetypen und Channels.

Hinweise

Ein ObjRef ist eine serialisierbare Darstellung eines Objekts, das verwendet wird, um einen Objektverweis über eine Anwendungsdomänengrenze zu übertragen. Das Erstellen eines ObjRef für ein Objekt wird als Marshalling bezeichnet. Kann ObjRef ü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 analysiert ObjRef werden, um einen Proxy für das Objekt zu erstellen, der in der Regel mit dem realen Objekt verbunden ist. Dieser Vorgang wird als entmarshaling bezeichnet.

Ein ObjRef enthält Informationen, die die Type - und -Klasse des gemarshallten Objekts, einen URI, der das spezifische Objekt instance eindeutig identifiziert, und Kommunikationsinformationen darüber, wie die Remotingunterteilung erreicht werden kann, in der sich das Objekt befindet.

Der angegebene Type wird von der Remotinginfrastruktur verwendet, um den Bereich der verfügbar gemachten Typhierarchie einzuschränken. Wenn z. B. Objekt A von Objekt B abgeleitet wird, 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 aus einem von zwei Gründen nicht einem Proxy zuordnen: Entweder wurde der URI auf der Serverseite für das Objekt generiert, das es darstellt, oder das Objekt ist allgemein bekannt. In diesem Fall ist der URI bekannt. Aus diesem Grund wird eine Ausnahme ausgelöst, wenn der Obj Parameter ein Proxy ist. Bei benutzerdefinierten Proxys wird diese Einschränkung gelockert, da der transparente Proxy als Serverobjekt behandelt wird.

Weitere Informationen

Gilt für: