共用方式為


RemotingServices.Marshal 方法

定義

將指定的 MarshalByRefObject 轉換成 ObjRef 類別的實例,可串行化以在應用程式域與網路之間傳輸。

多載

Marshal(MarshalByRefObject)

取得 MarshalByRefObject,向遠端基礎結構註冊,並將它轉換成 ObjRef 類別的實例。

Marshal(MarshalByRefObject, String)

使用指定的 URI,將指定的 MarshalByRefObject 轉換成 ObjRef 類別的實例。

Marshal(MarshalByRefObject, String, Type)

取得 MarshalByRefObject,並將它轉換成具有指定 URI 的 ObjRef 類別實例,以及提供的 Type

Marshal(MarshalByRefObject)

取得 MarshalByRefObject,向遠端基礎結構註冊,並將它轉換成 ObjRef 類別的實例。

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

參數

Obj
MarshalByRefObject

要轉換的物件。

傳回

ObjRef 類別的實例,表示在 Obj 參數中指定的物件。

例外狀況

Obj 參數是物件 Proxy。

呼叫堆疊中至少有一個較高的呼叫端沒有設定遠端類型和通道的許可權。

備註

ObjRef 是物件可串行化的表示法,用來跨應用程式域界限傳輸對象參考。 為物件建立 ObjRef 稱為封送處理。 ObjRef 可以透過通道傳輸到另一個應用程式域(可能在另一個進程或計算機上)。 在其他應用程式域中,必須剖析 ObjRef,才能建立物件的 Proxy,通常連線到實際物件。 此作業稱為「取消分界」。

ObjRef 包含資訊,描述要封送處理之物件的 Type 和類別、可唯一識別特定物件實例的 URI,以及有關如何到達物件所在遠端細分的通訊相關信息。

在封送處理期間,會使用目前線程的內容,而不是建立物件時使用中的內容。 如果 uri 不是由 SetObjectUriForMarshal 方法明確設定,它就會由遠端身分識別基礎結構自動產生。

您無法基於下列兩個原因之一,將 URI 與 Proxy 產生:在伺服器端針對它所代表的對象產生 URI,或已知物件,在此情況下,URI 為已知。 因此,如果 Obj 參數是 Proxy,則會擲回例外狀況。 對於自定義 Proxy 而言,這項限制會放寬,因為透明 Proxy 會被視為伺服器物件。

另請參閱

適用於

Marshal(MarshalByRefObject, String)

使用指定的 URI,將指定的 MarshalByRefObject 轉換成 ObjRef 類別的實例。

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

參數

Obj
MarshalByRefObject

要轉換的物件。

URI
String

要用來初始化新 ObjRef的指定 URI。 可以是 null

傳回

ObjRef 類別的實例,表示在 Obj 參數中指定的物件。

例外狀況

Obj 是物件 Proxy,而且 URI 參數不會 null

呼叫堆疊中至少有一個較高的呼叫端沒有設定遠端類型和通道的許可權。

範例

下列程式代碼範例示範如何使用目前的 Marshal 方法來封送處理指定的物件。

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

備註

ObjRef 是物件可串行化的表示法,用來跨應用程式域界限傳輸對象參考。 為物件建立 ObjRef 稱為封送處理。 ObjRef 可以透過通道傳輸到另一個應用程式域(可能在另一個進程或計算機上)。 在其他應用程式域中,必須剖析 ObjRef,才能建立物件的 Proxy,通常連線到實際物件。 此作業稱為「取消分界」。

ObjRef 包含資訊,描述要封送處理之物件的 Type 和類別、可唯一識別特定物件實例的 URI,以及有關如何到達物件所在遠端細分的通訊相關信息。

在封送處理期間,會使用目前線程的內容,而不是建立物件時使用中的內容。

您無法基於下列兩個原因之一,將 URI 與 Proxy 產生:在伺服器端針對它所代表的對象產生 URI,或已知物件,在此情況下,URI 為已知。 因此,如果 Obj 參數是 Proxy,則會擲回例外狀況。 對於自定義 Proxy 而言,這項限制會放寬,因為透明 Proxy 會被視為伺服器物件。

另請參閱

適用於

Marshal(MarshalByRefObject, String, Type)

取得 MarshalByRefObject,並將它轉換成具有指定 URI 的 ObjRef 類別實例,以及提供的 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

參數

Obj
MarshalByRefObject

要轉換成 ObjRef的物件。

ObjURI
String

Obj 參數中指定的物件 URI 會以封送處理。 可以是 null

RequestedType
Type

Type Obj 封送處理為 。 可以是 null

傳回

ObjRef 類別的實例,表示在 Obj 參數中指定的物件。

例外狀況

Obj 是遠端物件的 Proxy,而且 ObjUri 參數不會 null

呼叫堆疊中至少有一個較高的呼叫端沒有設定遠端類型和通道的許可權。

備註

ObjRef 是物件可串行化的表示法,用來跨應用程式域界限傳輸對象參考。 為物件建立 ObjRef 稱為封送處理。 ObjRef 可以透過通道傳輸到另一個應用程式域(可能在另一個進程或計算機上)。 在其他應用程式域中,必須剖析 ObjRef,才能建立物件的 Proxy,通常連線到實際物件。 此作業稱為「取消分界」。

ObjRef 包含資訊,描述要封送處理之物件的 Type 和類別、可唯一識別特定物件實例的 URI,以及有關如何到達物件所在遠端細分的通訊相關信息。

遠端基礎結構會使用指定的 Type 來限制公開類型階層的範圍。 例如,如果物件 A 衍生自物件 B,其衍生自物件 C,且呼叫 Marshal,則用戶端可以將 C 與 B 之間的 Proxy 轉換為 A。

在封送處理期間,會使用目前線程的內容,而不是建立物件時使用中的內容。

您無法基於下列兩個原因之一,將 URI 與 Proxy 產生:在伺服器端針對它所代表的對象產生 URI,或已知物件,在此情況下,URI 為已知。 因此,如果 Obj 參數是 Proxy,則會擲回例外狀況。 對於自定義 Proxy 而言,這項限制會放寬,因為透明 Proxy 會被視為伺服器物件。

另請參閱

適用於