RemotingServices.GetObjRefForProxy(MarshalByRefObject) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
回傳 ObjRef 代表指定代理的遠端物件。
public:
static System::Runtime::Remoting::ObjRef ^ GetObjRefForProxy(MarshalByRefObject ^ obj);
public static System.Runtime.Remoting.ObjRef GetObjRefForProxy(MarshalByRefObject obj);
[System.Security.SecurityCritical]
public static System.Runtime.Remoting.ObjRef GetObjRefForProxy(MarshalByRefObject obj);
static member GetObjRefForProxy : MarshalByRefObject -> System.Runtime.Remoting.ObjRef
[<System.Security.SecurityCritical>]
static member GetObjRefForProxy : MarshalByRefObject -> System.Runtime.Remoting.ObjRef
Public Shared Function GetObjRefForProxy (obj As MarshalByRefObject) As ObjRef
參數
一個連接到你想建立 ObjRef 的物件的代理。
傳回
ObjRef A 代表指定代理所連接的遠端物件,或null若該物件或代理尚未被 marshaled。
- 屬性
例外狀況
直接呼叫者沒有基礎設施權限。
範例
以下程式碼範例示範如何取得 ObjRef 指定物件的實例。
ObjRef^ objRefSample = RemotingServices::GetObjRefForProxy( myRemoteObject );
Console::WriteLine( "***ObjRef Details***" );
Console::WriteLine( "URI:\t {0}", objRefSample->URI );
array<Object^>^channelData = objRefSample->ChannelInfo->ChannelData;
Console::WriteLine( "Channel Info:" );
IEnumerator^ myEnum = channelData->GetEnumerator();
while ( myEnum->MoveNext() )
{
Object^ o = safe_cast<Object^>(myEnum->Current);
Console::WriteLine( "\t {0}", o );
}
IEnvoyInfo^ envoyInfo = objRefSample->EnvoyInfo;
if ( envoyInfo == nullptr )
{
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( System::Drawing::Bitmap::typeid, objRefSample ) );
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));
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))
備註
ObjRef 是物件可串行化的表示法,用來跨應用程式域界限傳輸對象參考。 為物件建立 a ObjRef 稱為 marshaling。 ObjRef 可以透過通道傳輸到另一個應用程式域(可能在另一個進程或計算機上)。 在其他應用程式域中,必須剖析 ObjRef,才能建立物件的 Proxy,通常連線到實際物件。 這種操作稱為解散。 在解封組過程中,會解析 以 ObjRef 擷取遠端物件的方法資訊,並建立透明代理與 RealProxy 物件。
A ObjRef 包含描述被封送物件類別的 Type 資訊、唯一識別特定物件實例的 URI,以及關於如何抵達物件所在遠端應用程式的通訊資訊。