RemotingServices.GetObjRefForProxy メソッド
指定したプロキシから、リモート オブジェクトを表す ObjRef を返します。
Public Shared Function GetObjRefForProxy( _
ByVal obj As MarshalByRefObject _) As ObjRef
[C#]
public static ObjRef GetObjRefForProxy(MarshalByRefObjectobj);
[C++]
public: static ObjRef* GetObjRefForProxy(MarshalByRefObject* obj);
[JScript]
public static function GetObjRefForProxy(
obj : MarshalByRefObject) : ObjRef;
パラメータ
- obj
ObjRef を作成する対象となるオブジェクトに接続されたプロキシ。
戻り値
指定したプロキシが接続されているリモート オブジェクトを表す ObjRef 。オブジェクトまたはプロキシがマーシャリングされていない場合は null 参照 (Visual Basic では Nothing) 。
例外
例外の種類 | 条件 |
---|---|
SecurityException | 直前の呼び出し元に、インフラストラクチャ アクセス許可がありません。 |
解説
ObjRef は、アプリケーション ドメイン境界にわたってオブジェクト参照を転送するために使用するオブジェクトのシリアル化可能な表現です。オブジェクトの ObjRef を作成することをマーシャリングと言います。 ObjRef は、チャネルを経由して、別のプロセスやコンピュータ上にある場合もある別のアプリケーション ドメインに転送できます。他のアプリケーション ドメインに転送されたら、その ObjRef を解析して、通常は実際のオブジェクトに接続される、そのオブジェクトのプロキシを作成する必要があります。この操作をマーシャリング解除と言います。マーシャリング解除時には、 ObjRef を解析してリモート オブジェクトのメソッド情報が抽出され、透過プロキシ オブジェクトと RealProxy オブジェクトの両方が作成されます。
ObjRef は、マーシャリング対象のオブジェクトの Type とクラスを説明する情報、特定のオブジェクト インスタンスを一意に識別する URI、およびそのオブジェクトが配置されているリモート アプリケーションに到達する方法についての通信関連情報を格納します。
使用例
[Visual Basic, C#, C++] 指定したオブジェクトの ObjRef インスタンスを取得する方法の例を次に示します。
Dim objRefSample As ObjRef = RemotingServices.GetObjRefForProxy(myRemoteObject)
Console.WriteLine("***ObjRef Details***")
Console.WriteLine("URI:" + ControlChars.Tab + "{0}", objRefSample.URI)
Dim channelData As Object() = objRefSample.ChannelInfo.ChannelData
Console.WriteLine("Channel Info:")
Dim o As Object
For Each o In channelData
Console.WriteLine(ControlChars.Tab + "{0}", o.ToString())
Next o
Dim envoyInfo As IEnvoyInfo = objRefSample.EnvoyInfo
If envoyInfo Is Nothing Then
Console.WriteLine("This ObjRef does not have envoy information.")
Else
Dim envoySinks As IMessageSink = envoyInfo.EnvoySinks
Console.WriteLine("Envoy Sink Class: {0}", envoySinks)
End If
Dim typeInfo As IRemotingTypeInfo = objRefSample.TypeInfo
Console.WriteLine("Remote type name: {0}", typeInfo.TypeName)
Console.WriteLine("Can my object cast to a Bitmap? {0}", typeInfo.CanCastTo(GetType(System.Drawing.Bitmap), objRefSample))
[C#]
ObjRef objRefSample = RemotingServices.GetObjRefForProxy(myRemoteObject);
Console.WriteLine("***ObjRef Details***");
Console.WriteLine("URI:\t{0}", objRefSample.URI);
object[] channelData = objRefSample.ChannelInfo.ChannelData;
Console.WriteLine("Channel Info:");
foreach(object o in channelData)
Console.WriteLine("\t{0}", o.ToString());
IEnvoyInfo envoyInfo = objRefSample.EnvoyInfo;
if (envoyInfo == null) {
Console.WriteLine("This ObjRef does not have envoy information.");
}
else {
IMessageSink envoySinks = envoyInfo.EnvoySinks;
Console.WriteLine("Envoy Sink Class: {0}", envoySinks);
}
IRemotingTypeInfo typeInfo = objRefSample.TypeInfo;
Console.WriteLine("Remote type name: {0}", typeInfo.TypeName);
Console.WriteLine("Can my object cast to a Bitmap? {0}",
typeInfo.CanCastTo(typeof(System.Drawing.Bitmap), objRefSample));
[C++]
ObjRef* objRefSample = RemotingServices::GetObjRefForProxy(myRemoteObject);
Console::WriteLine(S"***ObjRef Details***");
Console::WriteLine(S"URI:\t {0}", objRefSample->URI);
Object* channelData __gc[] = objRefSample->ChannelInfo->ChannelData;
Console::WriteLine(S"Channel Info:");
IEnumerator* myEnum = channelData->GetEnumerator();
while (myEnum->MoveNext())
{
Object* o = __try_cast<Object*>(myEnum->Current);
Console::WriteLine(S"\t {0}", o);
}
IEnvoyInfo* envoyInfo = objRefSample->EnvoyInfo;
if (envoyInfo == 0)
{
Console::WriteLine(S"This ObjRef does not have envoy information.");
}
else
{
IMessageSink* envoySinks = envoyInfo->EnvoySinks;
Console::WriteLine(S"Envoy Sink Class: {0}", envoySinks);
}
IRemotingTypeInfo* typeInfo = objRefSample->TypeInfo;
Console::WriteLine(S"Remote type name: {0}", typeInfo->TypeName);
Console::WriteLine(S"Can my Object* cast to a Bitmap? {0}",
__box(typeInfo->CanCastTo(__typeof(System::Drawing::Bitmap), objRefSample)));
[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 セキュリティ:
- SecurityPermission (インフラストラクチャ コードを操作するために必要なアクセス許可)要求値: SecurityAction.LinkDemand; アクセス許可値: SecurityPermissionFlag.Infrastructure
参照
RemotingServices クラス | RemotingServices メンバ | System.Runtime.Remoting 名前空間