RemotingServices.Marshal メソッド

定義

特定の MarshalByRefObjectObjRef クラスのインスタンスに変換して、このインスタンスをアプリケーション ドメイン間およびネットワーク上の伝送のためにシリアル化できます。

オーバーロード

Marshal(MarshalByRefObject)

MarshalByRefObject を取り、これをリモート処理インフラストラクチャで登録して、ObjRef クラスのインスタンスに変換します。

Marshal(MarshalByRefObject, String)

特定の MarshalByRefObject を、指定した URI を持つ 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

変換対象のオブジェクト。

戻り値

Obj パラメーターで指定されたオブジェクトを表す ObjRef クラスのインスタンス。

例外

Obj パラメーターがオブジェクトのプロキシです。

コールスタックの上位にある 1 つ以上の呼び出し元に、リモート処理の型とチャネルを構成するためのアクセス許可がありません。

注釈

ObjRefは、アプリケーション ドメイン境界を越えてオブジェクト参照を転送するために使用されるオブジェクトのシリアル化可能な表現です。 オブジェクトの を ObjRef 作成することは、マーシャリングと呼ばれます。 は ObjRef 、チャネルを介して別のアプリケーション ドメイン (場合によっては別のプロセスまたはコンピューター上) に転送できます。 もう一方のアプリケーション ドメインに入ったら、 ObjRef を解析して、オブジェクトのプロキシを作成する必要があります。通常は実際のオブジェクトに接続されています。 この操作は、非マーシャリングと呼ばれます。

ObjRefには、マーシャリングされるオブジェクトの クラスと クラス、特定のオブジェクト インスタンスを一意に識別する URI、およびオブジェクトが配置されているリモート処理サブ区分に到達する方法に関する通信関連情報を記述Typeする情報が含まれます。

マーシャリング中は、オブジェクトの作成時にアクティブだったコンテキストではなく、現在のスレッドのコンテキストが使用されます。 URI が メソッドによって SetObjectUriForMarshal 明示的に設定されていない場合は、リモート処理 ID インフラストラクチャによって自動的に生成されます。

URI をプロキシに関連付けることはできません。その理由は、URI が表すオブジェクトに対してサーバー側で生成されたか、オブジェクトが既知であるか (その場合は URI がわかっている) のいずれかです。 このため、 パラメーターがプロキシの Obj 場合は、例外がスローされます。 カスタム プロキシの場合、透過的プロキシはサーバー オブジェクトとして扱われるため、この制限は緩和されます。

こちらもご覧ください

適用対象

Marshal(MarshalByRefObject, String)

特定の MarshalByRefObject を、指定した URI を持つ 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 の可能性があります。

戻り値

Obj パラメーターで指定されたオブジェクトを表す ObjRef クラスのインスタンス。

例外

Obj がオブジェクト プロキシであり、URI パラメーターが null ではありません。

コールスタックの上位にある 1 つ以上の呼び出し元に、リモート処理の型とチャネルを構成するためのアクセス許可がありません。

次のコード例では、現在 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 を解析して、オブジェクトのプロキシを作成する必要があります。通常は実際のオブジェクトに接続されています。 この操作は、非マーシャリングと呼ばれます。

ObjRefには、マーシャリングされるオブジェクトの クラスと クラス、特定のオブジェクト インスタンスを一意に識別する URI、およびオブジェクトが配置されているリモート処理サブ区分に到達する方法に関する通信関連情報を記述Typeする情報が含まれます。

マーシャリング中は、オブジェクトの作成時にアクティブだったコンテキストではなく、現在のスレッドのコンテキストが使用されます。

URI をプロキシに関連付けることはできません。その理由は、URI が表すオブジェクトに対してサーバー側で生成されたか、オブジェクトが既知であるか (その場合は URI がわかっている) のいずれかです。 このため、 パラメーターがプロキシの Obj 場合は、例外がスローされます。 カスタム プロキシの場合、透過的プロキシはサーバー オブジェクトとして扱われるため、この制限は緩和されます。

こちらもご覧ください

適用対象

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

Obj がマーシャリングされるときの Typenull の可能性があります。

戻り値

Obj パラメーターで指定されたオブジェクトを表す ObjRef クラスのインスタンス。

例外

Obj がリモート オブジェクトのプロキシであり、ObjUri パラメーターが null ではありません。

コールスタックの上位にある 1 つ以上の呼び出し元に、リモート処理の型とチャネルを構成するためのアクセス許可がありません。

注釈

ObjRefは、アプリケーション ドメイン境界を越えてオブジェクト参照を転送するために使用されるオブジェクトのシリアル化可能な表現です。 オブジェクトの を ObjRef 作成することは、マーシャリングと呼ばれます。 は ObjRef 、チャネルを介して別のアプリケーション ドメイン (場合によっては別のプロセスまたはコンピューター上) に転送できます。 もう一方のアプリケーション ドメインに入ったら、 ObjRef を解析して、オブジェクトのプロキシを作成する必要があります。通常は実際のオブジェクトに接続されています。 この操作は、非マーシャリングと呼ばれます。

ObjRefには、マーシャリングされるオブジェクトの クラスと クラス、特定のオブジェクト インスタンスを一意に識別する URI、およびオブジェクトが配置されているリモート処理サブ区分に到達する方法に関する通信関連情報を記述Typeする情報が含まれます。

指定された Type は、リモート処理インフラストラクチャによって使用され、公開される型階層のスコープを制限します。 たとえば、オブジェクト A がオブジェクト C から派生し Marshal 、呼び出されるオブジェクト B から派生した場合、クライアントは C と B の間でプロキシをキャストできますが、A にはキャストできません。

マーシャリング中は、オブジェクトの作成時にアクティブだったコンテキストではなく、現在のスレッドのコンテキストが使用されます。

URI をプロキシに関連付けることはできません。その理由は、URI が表すオブジェクトに対してサーバー側で生成されたか、オブジェクトが既知であるか (その場合は URI がわかっている) のいずれかです。 このため、 パラメーターがプロキシの Obj 場合は、例外がスローされます。 カスタム プロキシの場合、透過的プロキシはサーバー オブジェクトとして扱われるため、この制限は緩和されます。

こちらもご覧ください

適用対象