ObjRef クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
プロキシを生成してリモート オブジェクトと通信するために必要なすべての関連情報を格納します。
public ref class ObjRef : System::Runtime::Serialization::IObjectReference, System::Runtime::Serialization::ISerializable
[System.Serializable]
public class ObjRef : System.Runtime.Serialization.IObjectReference, System.Runtime.Serialization.ISerializable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class ObjRef : System.Runtime.Serialization.IObjectReference, System.Runtime.Serialization.ISerializable
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
[System.Security.SecurityCritical]
public class ObjRef : System.Runtime.Serialization.IObjectReference, System.Runtime.Serialization.ISerializable
[<System.Serializable>]
type ObjRef = class
interface IObjectReference
interface ISerializable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ObjRef = class
interface IObjectReference
interface ISerializable
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
[<System.Security.SecurityCritical>]
type ObjRef = class
interface IObjectReference
interface ISerializable
Public Class ObjRef
Implements IObjectReference, ISerializable
- 継承
-
ObjRef
- 属性
- 実装
例
次のコード例では、カスタム ObjRefの を使用する方法を示します。 カスタム ObjRefをテストするアクティブ化コードを表示するには、 メソッドの例を RegisterWellKnownServiceType 参照してください。
// a custom ObjRef class that outputs its status
[System::Security::Permissions::SecurityPermissionAttribute(
System::Security::Permissions::SecurityAction::Demand,
Flags=System::Security::Permissions::SecurityPermissionFlag::SerializationFormatter)]
[System::Security::Permissions::SecurityPermissionAttribute
(System::Security::Permissions::SecurityAction::Demand,
Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)]
[System::Security::Permissions::SecurityPermissionAttribute
(System::Security::Permissions::SecurityAction::InheritanceDemand,
Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)]
public ref class MyObjRef: public ObjRef
{
private:
// only instantiate using marshaling or deserialization
MyObjRef(){}
public:
MyObjRef( MarshalByRefObject^ o, Type^ t )
: ObjRef( o, t )
{
Console::WriteLine( "Created MyObjRef." );
ORDump();
}
MyObjRef( SerializationInfo^ i, StreamingContext c )
: ObjRef( i, c )
{
Console::WriteLine( "Deserialized MyObjRef." );
}
virtual void GetObjectData( SerializationInfo^ s, StreamingContext c ) override
{
// After calling the base method, change the type from ObjRef to MyObjRef
ObjRef::GetObjectData( s, c );
s->SetType( GetType() );
Console::WriteLine( "Serialized MyObjRef." );
}
virtual Object^ GetRealObject( StreamingContext context ) override
{
if ( IsFromThisAppDomain() || IsFromThisProcess() )
{
Console::WriteLine( "Returning actual Object^ referenced by MyObjRef." );
return ObjRef::GetRealObject( context );
}
else
{
Console::WriteLine( "Returning proxy to remote Object^." );
return RemotingServices::Unmarshal( this );
}
}
void ORDump()
{
Console::WriteLine( " --- Reporting MyObjRef Info --- " );
Console::WriteLine( "Reference to {0}.", TypeInfo->TypeName );
Console::WriteLine( "URI is {0}.", URI );
Console::WriteLine( "\nWriting EnvoyInfo: " );
if ( EnvoyInfo != nullptr )
{
IMessageSink^ EISinks = EnvoyInfo->EnvoySinks;
while ( EISinks != nullptr )
{
Console::WriteLine( "\tSink: {0}", EISinks );
EISinks = EISinks->NextSink;
}
}
else
Console::WriteLine( "\t {no sinks}" );
Console::WriteLine( "\nWriting ChannelInfo: " );
for ( int i = 0; i < ChannelInfo->ChannelData->Length; i++ )
Console::WriteLine( "\tChannel: {0}", ChannelInfo->ChannelData[ i ] );
Console::WriteLine( " ----------------------------- " );
}
};
// a class that uses MyObjRef
public ref class LocalObject: public MarshalByRefObject
{
public:
// overriding CreateObjRef will allow us to return a custom ObjRef
[System::Security::Permissions::SecurityPermissionAttribute
(System::Security::Permissions::SecurityAction::LinkDemand,
Flags=System::Security::Permissions::SecurityPermissionFlag::Infrastructure)]
virtual ObjRef^ CreateObjRef( Type^ t ) override
{
return gcnew MyObjRef( this,t );
}
};
// a custom ObjRef class that outputs its status
public class MyObjRef : ObjRef {
// only instantiate using marshaling or deserialization
private MyObjRef() { }
public MyObjRef(MarshalByRefObject o, Type t) : base(o, t) {
Console.WriteLine("Created MyObjRef.");
ORDump();
}
public MyObjRef(SerializationInfo i, StreamingContext c) : base(i, c) {
Console.WriteLine("Deserialized MyObjRef.");
}
public override void GetObjectData(SerializationInfo s, StreamingContext c) {
// After calling the base method, change the type from ObjRef to MyObjRef
base.GetObjectData(s, c);
s.SetType(GetType());
Console.WriteLine("Serialized MyObjRef.");
}
public override Object GetRealObject(StreamingContext context) {
if ( IsFromThisAppDomain() || IsFromThisProcess() ) {
Console.WriteLine("Returning actual object referenced by MyObjRef.");
return base.GetRealObject(context);
}
else {
Console.WriteLine("Returning proxy to remote object.");
return RemotingServices.Unmarshal(this);
}
}
public void ORDump() {
Console.WriteLine(" --- Reporting MyObjRef Info --- ");
Console.WriteLine("Reference to {0}.", TypeInfo.TypeName);
Console.WriteLine("URI is {0}.", URI);
Console.WriteLine("\nWriting EnvoyInfo: ");
if ( EnvoyInfo != null) {
IMessageSink EISinks = EnvoyInfo.EnvoySinks;
while (EISinks != null) {
Console.WriteLine("\tSink: " + EISinks.ToString());
EISinks = EISinks.NextSink;
}
}
else
{
Console.WriteLine("\t {no sinks}");
}
Console.WriteLine("\nWriting ChannelInfo: ");
for (int i = 0; i < ChannelInfo.ChannelData.Length; i++)
Console.WriteLine ("\tChannel: {0}", ChannelInfo.ChannelData[i]);
Console.WriteLine(" ----------------------------- ");
}
}
// a class that uses MyObjRef
public class LocalObject : MarshalByRefObject {
// overriding CreateObjRef will allow us to return a custom ObjRef
public override ObjRef CreateObjRef(Type t) {
return new MyObjRef(this, t);
}
}
' a custom ObjRef class that outputs its status
<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
Public Class MyObjRef
Inherits ObjRef
' only instantiate using marshaling or deserialization
Private Sub New()
End Sub
Public Sub New(ByVal o As MarshalByRefObject, ByVal t As Type)
MyBase.New(o, t)
Console.WriteLine("Created MyObjRef.")
ORDump()
End Sub
Public Sub New(ByVal i As SerializationInfo, ByVal c As StreamingContext)
MyBase.New(i, c)
Console.WriteLine("Deserialized MyObjRef.")
End Sub
Public Overrides Sub GetObjectData(ByVal s As SerializationInfo, ByVal c As StreamingContext)
' After calling the base method, change the type from ObjRef to MyObjRef
MyBase.GetObjectData(s, c)
s.SetType([GetType]())
Console.WriteLine("Serialized MyObjRef.")
End Sub
Public Overrides Function GetRealObject(ByVal context As StreamingContext) As [Object]
If IsFromThisAppDomain() Or IsFromThisProcess() Then
Console.WriteLine("Returning actual object referenced by MyObjRef.")
Return MyBase.GetRealObject(context)
Else
Console.WriteLine("Returning proxy to remote object.")
Return RemotingServices.Unmarshal(Me)
End If
End Function
Public Sub ORDump()
Console.WriteLine(" --- Reporting MyObjRef Info --- ")
Console.WriteLine("Reference to {0}.", TypeInfo.TypeName)
Console.WriteLine("URI is {0}.", URI)
Console.WriteLine(ControlChars.Cr + "Writing EnvoyInfo: ")
If Not (EnvoyInfo Is Nothing) Then
Dim EISinks As IMessageSink = EnvoyInfo.EnvoySinks
Dim count As Integer = 0
While Not (EISinks Is Nothing)
Console.WriteLine(ControlChars.Tab + "Interated through sink #{0}", (count = count + 1))
EISinks = EISinks.NextSink
End While
Else
Console.WriteLine(ControlChars.Tab + " {no sinks}")
End If
Console.WriteLine(ControlChars.Cr + "Writing ChannelInfo: ")
Dim i As Integer
For i = 0 To ChannelInfo.ChannelData.Length - 1
Console.WriteLine(ControlChars.Tab + "Channel: {0}", ChannelInfo.ChannelData(i))
Next i
Console.WriteLine(" ----------------------------- ")
End Sub
End Class
' a class that uses MyObjRef
<PermissionSet(SecurityAction.Demand, Name:="FullTrust")> _
Public Class LocalObject
Inherits MarshalByRefObject
' overriding CreateObjRef will allow us to return a custom ObjRef
Public Overrides Function CreateObjRef(ByVal t As Type) As ObjRef
Return New MyObjRef(Me, t)
End Function
End Class
注釈
は ObjRef 、拡張 MarshalByRefObject するオブジェクトのシリアル化可能な表現です (MBR)。 は ObjRef 、境界を越えて AppDomain オブジェクト参照を転送するために使用されます。 オブジェクトの を ObjRef 作成することは、マーシャリングと呼ばれます。 を作成 (マーシャリングMarshalByRefObject) するには、リモート処理インフラストラクチャに MBR オブジェクトを登録するか (および RemotingServices.Marshalを参照RemotingConfiguration)、またはリモート オブジェクトを呼び出すときに MBR オブジェクトをパラメーターとして渡すことによって暗黙的に作成ObjRefできます。 リモート処理では、オブジェクトを使用 ObjRef して、リモート処理される に関するすべての関連情報を MarshalByRefObject 格納および送信します。
ObjRefには、マーシャリングされるオブジェクトの クラスと クラス、その正確な場所、およびオブジェクトが配置されているリモート処理サブ区分に到達する方法に関する通信関連の情報を記述Typeする情報が含まれています。
実装 MarshalByRefObject するクラスがマーシャリングされると、 ObjRef それを表す がチャネル経由で別のアプリケーション ドメイン (場合によっては別のプロセスまたはコンピューター内) に転送されます。 ObjRefターゲット アプリケーション ドメインで が逆シリアル化されると (XML および SOAP シリアル化を参照)、リモート MBR オブジェクトの透過的プロキシを作成するように解析されます。 この操作は、アンマーシャリングと呼ばれます。
透明プロキシは、実際のオブジェクトがクライアントの空間に存在するという錯覚を提供するオブジェクトです。 これを実現するには、リモート処理インフラストラクチャを使用して、実際のオブジェクトに対して行われた呼び出しを転送します。 透過的プロキシ自体は、 型 RealProxyのマネージド ランタイム クラスのインスタンスによって格納されます。 は RealProxy 、透過的なプロキシから操作を転送するために必要な機能の一部を実装します。
プロキシ オブジェクトは、 内 AppDomainのリモート処理サブ区分に関係なく使用できます。 アプリケーションでは、プロキシ参照とオブジェクト参照を区別する必要はありません。 ただし、アクティブ化、有効期間管理、トランザクションなどの問題を処理するサービス プロバイダーは、このような区別を行う必要があります。
このクラスは、クラス レベルでリンク要求と継承要求を行います。 SecurityExceptionは、直接の呼び出し元または派生クラスにインフラストラクチャアクセス許可がない場合にスローされます。 セキュリティ要求の詳細については、「 リンク要求 と 継承要求」を参照してください。
コンストラクター
ObjRef() |
ObjRef クラスの新しいインスタンスを既定値で初期化します。 |
ObjRef(MarshalByRefObject, Type) |
指定した ObjRef の指定した MarshalByRefObject を参照して、Type クラスの新しいインスタンスを初期化します。 |
ObjRef(SerializationInfo, StreamingContext) |
シリアル化したデータから、ObjRef クラスの新しいインスタンスを初期化します。 |
プロパティ
ChannelInfo |
IChannelInfo の ObjRef を取得または設定します。 |
EnvoyInfo |
IEnvoyInfo の ObjRef を取得または設定します。 |
TypeInfo |
IRemotingTypeInfo が記述するオブジェクトの ObjRef を取得または設定します。 |
URI |
特定のオブジェクト インスタンスの URI (Uniform Resource Identifier) を取得または設定します。 |
メソッド
Equals(Object) |
指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。 (継承元 Object) |
GetHashCode() |
既定のハッシュ関数として機能します。 (継承元 Object) |
GetObjectData(SerializationInfo, StreamingContext) |
指定した SerializationInfo に、現在の ObjRef インスタンスをシリアル化するために必要なデータを設定します。 |
GetRealObject(StreamingContext) |
ObjRef が記述するリモート オブジェクトへの参照を返します。 |
GetType() |
現在のインスタンスの Type を取得します。 (継承元 Object) |
IsFromThisAppDomain() |
現在の ObjRef インスタンスが現在の AppDomain にあるオブジェクトを参照しているかどうかを示すブール値を返します。 |
IsFromThisProcess() |
現在の ObjRef インスタンスが現在のプロセスにあるオブジェクトを参照しているかどうかを示すブール値を返します。 |
MemberwiseClone() |
現在の Object の簡易コピーを作成します。 (継承元 Object) |
ToString() |
現在のオブジェクトを表す文字列を返します。 (継承元 Object) |
適用対象
こちらもご覧ください
.NET