ObjRef ObjRef ObjRef ObjRef Class

定義

プロキシを生成してリモート オブジェクトと通信するために必要なすべての関連情報を格納します。Stores all relevant information required to generate a proxy in order to communicate with a remote object.

public ref class ObjRef : System::Runtime::Serialization::IObjectReference, System::Runtime::Serialization::ISerializable
[System.Runtime.InteropServices.ComVisible(true)]
[System.Security.SecurityCritical]
[System.Serializable]
public class ObjRef : System.Runtime.Serialization.IObjectReference, System.Runtime.Serialization.ISerializable
type ObjRef = class
    interface IObjectReference
    interface ISerializable
Public Class ObjRef
Implements IObjectReference, ISerializable
継承
ObjRefObjRefObjRefObjRef
属性
実装

次のコード例は、カスタムの使用を示しますObjRefします。The following code example demonstrates the use of a custom ObjRef. カスタムのテストをアクティブ化コードを表示するObjRef、例をご覧ください、RegisterWellKnownServiceTypeメソッド。To view the activation code that tests the custom ObjRef, see the example for the RegisterWellKnownServiceType method.

// 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
[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
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
[PermissionSet(SecurityAction.Demand, Name="FullTrust")]
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

注釈

AObjRefを拡張するオブジェクトのシリアル化可能な表現であるMarshalByRefObject(MBR)。A ObjRef is a serializable representation of an object that extends MarshalByRefObject (MBR). AObjRef間でのオブジェクト参照を転送するために使用するAppDomain境界。A ObjRef is used to transfer an object reference across a AppDomain boundary. 作成、ObjRefのオブジェクトがマーシャ リングと呼ばれます。Creating a ObjRef for an object is known as marshaling. 作成することができます、 ObjRef (マーシャ リング、 MarshalByRefObject) か、明示的に MBR を登録することによってオブジェクトをリモート処理インフラストラクチャ (を参照してくださいRemotingConfigurationRemotingServices.Marshal)、またはリモートの呼び出し時に、パラメーターとして MBR オブジェクトを渡すことによって、暗黙的にオブジェクト。You can create a ObjRef (marshal a MarshalByRefObject) either explicitly, by registering the MBR object with the remoting infrastructure (see RemotingConfiguration and RemotingServices.Marshal), or implicitly, by passing an MBR object as a parameter when calling a remote object. リモート処理を使用してObjRef格納およびに関するすべての関連情報を送信するオブジェクト、MarshalByRefObjectリモート処理は実行します。Remoting uses ObjRef objects to store and transmit all the relevant information about the MarshalByRefObject being remoted.

ObjRefを説明する情報が含まれています、Typeオブジェクトのクラスとマーシャ リングされる、正確な場所、およびオブジェクトが配置されているリモート処理の一部分に到達する方法の通信に関連する情報。The ObjRef contains information that describes the Type and class of the object being marshaled, its exact location, and communication-related information on how to reach the remoting subdivision where the object is located.

クラスの実装後にMarshalByRefObjectがマーシャ リングされる、ObjRefを表す別のプロセスやコンピューターでおそらく、別のアプリケーション ドメインに、チャネルを介して転送されます。After a class implementing MarshalByRefObject is marshaled, the ObjRef that represents it is transferred through a channel into another application domain, possibly in another process or computer. ときに、ObjRefが逆シリアル化 (を参照してくださいXML および SOAP シリアル化) リモート MBR オブジェクトの透過プロキシを作成する対象のアプリケーション ドメインに解析されます。When the ObjRef is deserialized (see XML and SOAP Serialization) in the target application domain, it is parsed to create a transparent proxy for the remote MBR object. この操作は、マーシャ リング解除と呼ばれます。This operation is known as unmarshaling.

透過プロキシは、クライアントの領域で、実際のオブジェクトが置かれている錯覚を提供するオブジェクトです。A transparent proxy is an object that provides the illusion that the actual object resides in the client's space. リモート処理インフラストラクチャを使用して実際のオブジェクトに、それに対して行われた呼び出しを転送することによって、これを実現します。It achieves this by forwarding calls made on it to the real object using the remoting infrastructure. 透過的なプロキシ型のマネージ ランタイム クラスのインスタンス自体はRealProxyします。The transparent proxy is itself housed by an instance of a managed run-time class of type RealProxy. RealProxy透過プロキシから、操作を転送するための機能の一部を実装します。The RealProxy implements a part of the functionality needed to forward the operations from the transparent proxy.

プロキシ オブジェクトを使用して、内の任意のリモート処理再分割に関係なく、AppDomainします。A proxy object can be used without regard to any remoting subdivisions within a AppDomain. アプリケーションでは、プロキシの参照とオブジェクト参照が区別する必要があります。Applications need not distinguish between proxy references and object references. ただし、サービス プロバイダーがアクティブ化などの問題を扱う、有効期間管理、およびトランザクション必要がありますこのような違いがあります。However, service providers dealing with issues such as activation, lifetime management, and transactions need to make such distinctions.

このクラスは、リンク確認要求し、クラス レベルで継承確認要求を使用します。This class makes a link demand and an inheritance demand at the class level. ASecurityException直前の呼び出し元または派生クラスのいずれかにインフラストラクチャ アクセス許可があるない場合にスローされます。A SecurityException is thrown when either the immediate caller or the derived class does not have infrastructure permission. セキュリティ要求の詳細については、次を参照してください。リンク確認要求継承確認要求します。For details about security demands, see Link Demands and Inheritance Demands.

コンストラクター

ObjRef() ObjRef() ObjRef() ObjRef()

ObjRef クラスの新しいインスタンスを既定値で初期化します。Initializes a new instance of the ObjRef class with default values.

ObjRef(MarshalByRefObject, Type) ObjRef(MarshalByRefObject, Type) ObjRef(MarshalByRefObject, Type) ObjRef(MarshalByRefObject, Type)

指定した ObjRef の指定した MarshalByRefObject を参照して、Type クラスの新しいインスタンスを初期化します。Initializes a new instance of the ObjRef class to reference a specified MarshalByRefObject of a specified Type.

ObjRef(SerializationInfo, StreamingContext) ObjRef(SerializationInfo, StreamingContext) ObjRef(SerializationInfo, StreamingContext) ObjRef(SerializationInfo, StreamingContext)

シリアル化したデータから、ObjRef クラスの新しいインスタンスを初期化します。Initializes a new instance of the ObjRef class from serialized data.

プロパティ

ChannelInfo ChannelInfo ChannelInfo ChannelInfo

IChannelInfoObjRef を取得または設定します。Gets or sets the IChannelInfo for the ObjRef.

EnvoyInfo EnvoyInfo EnvoyInfo EnvoyInfo

IEnvoyInfoObjRef を取得または設定します。Gets or sets the IEnvoyInfo for the ObjRef.

TypeInfo TypeInfo TypeInfo TypeInfo

IRemotingTypeInfo が記述するオブジェクトの ObjRef を取得または設定します。Gets or sets the IRemotingTypeInfo for the object that the ObjRef describes.

URI URI URI URI

特定のオブジェクト インスタンスの URI (Uniform Resource Identifier) を取得または設定します。Gets or sets the URI of the specific object instance.

メソッド

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(Inherited from Object)
GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext) GetObjectData(SerializationInfo, StreamingContext)

指定した SerializationInfo に、現在の ObjRef インスタンスをシリアル化するために必要なデータを設定します。Populates a specified SerializationInfo with the data needed to serialize the current ObjRef instance.

GetRealObject(StreamingContext) GetRealObject(StreamingContext) GetRealObject(StreamingContext) GetRealObject(StreamingContext)

ObjRef が記述するリモート オブジェクトへの参照を返します。Returns a reference to the remote object that the ObjRef describes.

GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(Inherited from Object)
IsFromThisAppDomain() IsFromThisAppDomain() IsFromThisAppDomain() IsFromThisAppDomain()

現在の ObjRef インスタンスが現在の AppDomain にあるオブジェクトを参照しているかどうかを示すブール値を返します。Returns a Boolean value that indicates whether the current ObjRef instance references an object located in the current AppDomain.

IsFromThisProcess() IsFromThisProcess() IsFromThisProcess() IsFromThisProcess()

現在の ObjRef インスタンスが現在のプロセスにあるオブジェクトを参照しているかどうかを示すブール値を返します。Returns a Boolean value that indicates whether the current ObjRef instance references an object located in the current process.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(Inherited from Object)

セキュリティ

SecurityPermission
インフラストラクチャ コードを操作します。for operating with infrastructure code. 要求値: InheritanceDemand;アクセス許可の値。 InfrastructureDemand value: InheritanceDemand; Permission Value: Infrastructure

適用対象

こちらもご覧ください