次の方法で共有


RemotingServices.Unmarshal メソッド (ObjRef)

ObjRef を取り、これからプロキシ オブジェクトを作成します。

Overloads Public Shared Function Unmarshal( _
   ByVal objectRef As ObjRef _) As Object
[C#]
public static object Unmarshal(ObjRefobjectRef);
[C++]
public: static Object* Unmarshal(ObjRef* objectRef);
[JScript]
public static function Unmarshal(
   objectRef : ObjRef) : Object;

パラメータ

  • objectRef
    プロキシが作成される対象のリモート オブジェクトを表す ObjRef

戻り値

特定の ObjRef が表すオブジェクトへのプロキシ。

例外

例外の種類 条件
ArgumentException objectRef パラメータで指定した ObjRef インスタンスが適切に構成されていません。
SecurityException コールスタックの上位にある 1 つ以上の呼び出し元に、リモート処理の型とチャネルを構成するためのアクセス許可がありません。

解説

ObjRef は、アプリケーション ドメイン境界にわたってオブジェクト参照を転送するために使用するオブジェクトのシリアル化可能な表現です。オブジェクトの ObjRef を作成することをマーシャリングと言います。 ObjRef は、チャネルを経由して、別のプロセスやコンピュータ上にある場合もある別のアプリケーション ドメインに転送できます。他のアプリケーション ドメインに転送されたら、その ObjRef を解析して、通常は実際のオブジェクトに接続される、そのオブジェクトのプロキシを作成する必要があります。この操作をマーシャリング解除と言います。マーシャリング解除時には、 ObjRef を解析してリモート オブジェクトのメソッド情報が抽出され、透過プロキシ オブジェクトと RealProxy オブジェクトの両方が作成されます。解析された ObjRef の内容が透過プロキシに追加されてから、この透過プロキシが共通言語ランタイムで登録されます。

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

使用例

[Visual Basic, C#, C++] オブジェクトのマーシャリングを解除する方法の例を次に示します。

 
ChannelServices.RegisterChannel(New HttpChannel())

Dim objectSample As SampleService = CType(Activator.GetObject(GetType(SampleService), _ 
      "https://localhost:9000/MySampleService/SampleService.soap"), SampleService)

' The GetManuallyMarshaledObject() method uses RemotingServices.Marshal()
' to create an ObjRef object for a SampleTwo object.
Dim objRefSampleTwo As ObjRef = objectSample.GetManuallyMarshaledObject()

Dim objectSampleTwo As SampleTwo = CType(RemotingServices.Unmarshal(objRefSampleTwo), SampleTwo)

objectSampleTwo.PrintMessage("I successfully unmarshaled your ObjRef.  Thanks.")

[C#] 
ChannelServices.RegisterChannel(new HttpChannel());

SampleService objectSample = (SampleService)Activator.GetObject(typeof(SampleService), 
    "https://localhost:9000/MySampleService/SampleService.soap");

// The GetManuallyMarshaledObject() method uses RemotingServices.Marshal()
// to create an ObjRef object for a SampleTwo object.
ObjRef objRefSampleTwo = objectSample.GetManuallyMarshaledObject();

SampleTwo objectSampleTwo = (SampleTwo)RemotingServices.Unmarshal(objRefSampleTwo);

objectSampleTwo.PrintMessage("ObjRef successfuly unmarshaled."); 

[C++] 
ChannelServices::RegisterChannel(new HttpChannel());

SampleService* objectSample = dynamic_cast<SampleService*>(Activator::GetObject(__typeof(SampleService), 
    S"https://localhost:9000/MySampleService/SampleService.soap"));

Console::WriteLine(S"https://localhost:9000/MySampleService/SampleService.soap");

// The GetManuallyMarshaledObject() method uses RemotingServices::Marshal()
// to create an ObjRef object for a SampleTwo object.
ObjRef* objRefSampleTwo = objectSample->GetManuallyMarshaledObject();

SampleTwo* objectSampleTwo = dynamic_cast<SampleTwo*>(RemotingServices::Unmarshal(objRefSampleTwo));

objectSampleTwo->PrintMessage(S"ObjRef successfuly unmarshaled."); 

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

.NET Framework セキュリティ:

参照

RemotingServices クラス | RemotingServices メンバ | System.Runtime.Remoting 名前空間 | RemotingServices.Unmarshal オーバーロードの一覧 | RealProxy | ObjRef