次の方法で共有


RemotingServices.Marshal メソッド

定義

指定した MarshalByRefObjectObjRef クラスのインスタンスに変換します。このインスタンスは、アプリケーション ドメイン間およびネットワーク経由で転送するためにシリアル化できます。

オーバーロード

名前 説明
Marshal(MarshalByRefObject)

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

Marshal(MarshalByRefObject, String)

指定した MarshalByRefObject を、指定した URI を持つ ObjRef クラスのインスタンスに変換します。

Marshal(MarshalByRefObject, String, Type)

MarshalByRefObjectを受け取り、指定した URI と指定されたTypeを持つObjRef クラスのインスタンスに変換します。

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

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

URI をプロキシに関連付けることはできません。2 つの理由は、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には、マーシャリングされるオブジェクトのTypeとクラス、特定のオブジェクト インスタンスを一意に識別する URI、およびオブジェクトが配置されているリモート処理サブ区分に到達する方法に関する通信関連情報が含まれます。

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

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

こちらもご覧ください

適用対象

Marshal(MarshalByRefObject, String, Type)

MarshalByRefObjectを受け取り、指定した URI と指定されたTypeを持つObjRef クラスのインスタンスに変換します。

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 の可能性があります。

返品

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

例外

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

呼び出し履歴の上位の呼び出し元の少なくとも 1 つに、リモート処理の種類とチャネルを構成するアクセス許可がありません。

注釈

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

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

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

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

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

こちらもご覧ください

適用対象