RemotingServices.Marshal Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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
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
Das zu konvertierende Objekt.
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
Das Objekt, das in eine ObjRefkonvertiert werden soll.
- ObjURI
- String
Der URI, mit dem das im Obj
-Parameter angegebene Objekt gemarstet wird. Kann null
werden.
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.