Lire en anglais

Partager via


RealProxy Classe

Définition

Fournit des fonctionnalités de base aux proxies.

public abstract class RealProxy
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class RealProxy
[System.Runtime.InteropServices.ComVisible(true)]
[System.Security.SecurityCritical]
public abstract class RealProxy
Héritage
RealProxy
Attributs

Exemples

// Create a custom 'RealProxy'.
public class MyProxy : RealProxy
{
   String myURIString;
   MarshalByRefObject myMarshalByRefObject;

   public MyProxy(Type myType) : base(myType)
   {
      // RealProxy uses the Type to generate a transparent proxy.
      myMarshalByRefObject = (MarshalByRefObject)Activator.CreateInstance((myType));
      // Get 'ObjRef', for transmission serialization between application domains.
      ObjRef myObjRef = RemotingServices.Marshal(myMarshalByRefObject);
      // Get the 'URI' property of 'ObjRef' and store it.
      myURIString = myObjRef.URI;
      Console.WriteLine("URI :{0}", myObjRef.URI);
   }

   public override IMessage Invoke(IMessage myIMessage)
   {
      Console.WriteLine("MyProxy.Invoke Start");
      Console.WriteLine("");

      if (myIMessage is IMethodCallMessage)
         Console.WriteLine("IMethodCallMessage");

      if (myIMessage is IMethodReturnMessage)
         Console.WriteLine("IMethodReturnMessage");

      Type msgType = myIMessage.GetType();
      Console.WriteLine("Message Type: {0}", msgType.ToString());
      Console.WriteLine("Message Properties");
      IDictionary myIDictionary = myIMessage.Properties;
      // Set the '__Uri' property of 'IMessage' to 'URI' property of 'ObjRef'.
      myIDictionary["__Uri"] = myURIString;
      IDictionaryEnumerator myIDictionaryEnumerator =
         (IDictionaryEnumerator) myIDictionary.GetEnumerator();

      while (myIDictionaryEnumerator.MoveNext())
      {
         Object myKey = myIDictionaryEnumerator.Key;
         String myKeyName = myKey.ToString();
         Object myValue = myIDictionaryEnumerator.Value;

         Console.WriteLine("\t{0} : {1}", myKeyName,
            myIDictionaryEnumerator.Value);
         if (myKeyName == "__Args")
         {
            Object[] myObjectArray = (Object[])myValue;
            for (int aIndex = 0; aIndex < myObjectArray.Length; aIndex++)
               Console.WriteLine("\t\targ: {0} myValue: {1}", aIndex,
                  myObjectArray[aIndex]);
         }

         if ((myKeyName == "__MethodSignature") && (null != myValue))
         {
            Object[] myObjectArray = (Object[])myValue;
            for (int aIndex = 0; aIndex < myObjectArray.Length; aIndex++)
               Console.WriteLine("\t\targ: {0} myValue: {1}", aIndex,
                  myObjectArray[aIndex]);
         }
      }

      IMessage myReturnMessage;

      myIDictionary["__Uri"] = myURIString;
      Console.WriteLine("__Uri {0}", myIDictionary["__Uri"]);

      Console.WriteLine("ChannelServices.SyncDispatchMessage");
      myReturnMessage = ChannelServices.SyncDispatchMessage(myIMessage);

      // Push return value and OUT parameters back onto stack.

      IMethodReturnMessage myMethodReturnMessage = (IMethodReturnMessage)
         myReturnMessage;
      Console.WriteLine("IMethodReturnMessage.ReturnValue: {0}",
         myMethodReturnMessage.ReturnValue);

      Console.WriteLine("MyProxy.Invoke - Finish");

      return myReturnMessage;
   }
}

Remarques

La RealProxy classe est la abstract classe de base à partir de laquelle les proxys doivent dériver.

Un client qui utilise un objet au-delà d’une limite de communication à distance utilise en fait un proxy transparent pour l’objet. Le proxy transparent fournit l’illusion que l’objet réel réside dans l’espace du client. Pour ce faire, il transfère les appels effectués sur l’objet réel à l’aide de l’infrastructure de communication à distance.

Le proxy transparent est lui-même hébergé par une instance d’une classe runtime managée de type RealProxy. implémente RealProxy une partie de la fonctionnalité nécessaire pour transférer les opérations à partir du proxy transparent. Notez qu’un objet proxy hérite de la sémantique associée d’objets managés tels que le garbage collection, la prise en charge des champs et des méthodes, et peut être étendu pour former de nouvelles classes. Le proxy a une double nature : il agit comme un objet de la même classe que l’objet distant (proxy transparent), et il s’agit d’un objet managé lui-même.

Un objet proxy peut être utilisé sans tenir compte des subdivisions de communication à distance au sein d’un AppDomain.

Notes

Cette classe effectue une demande de liaison et une demande d’héritage au niveau de la classe. Un SecurityException est levée lorsque l’appelant immédiat ou la classe dérivée n’a pas d’autorisation d’infrastructure. Pour plus d’informations sur les demandes de sécurité, consultez Demandes de liaison et demandes d’héritage.

Notes pour les responsables de l’implémentation

Lorsque vous héritez de RealProxy, vous devez remplacer la Invoke(IMessage) méthode .

Constructeurs

RealProxy()

Initialise une nouvelle instance de la classe RealProxy avec les valeurs par défaut.

RealProxy(Type)

Initialise une nouvelle instance de la classe RealProxy qui représente un objet distant du Type spécifié.

RealProxy(Type, IntPtr, Object)

Initialise une nouvelle instance de la classe RealProxy.

Méthodes

AttachServer(MarshalByRefObject)

Attache l'instance de proxy en cours au MarshalByRefObject distant spécifié.

CreateObjRef(Type)

Crée ObjRef pour le type d'objet spécifié et l'inscrit avec l'infrastructure de communication à distance en tant qu'objet activé par le client.

DetachServer()

Détache l'instance de proxy en cours de l'objet serveur distant qu'elle représente.

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
GetCOMIUnknown(Boolean)

Demande une référence non managée à l’objet représenté par l’instance de proxy active.

GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetObjectData(SerializationInfo, StreamingContext)

Ajoute au RealProxy spécifié le proxy transparent de l'objet représenté par l'instance actuelle de SerializationInfo.

GetProxiedType()

Retourne Type pour l'objet représenté par l'instance actuelle de RealProxy.

GetStubData(RealProxy)

Récupère les données stub stockées pour le proxy spécifié.

GetTransparentProxy()

Retourne le proxy transparent pour l'instance actuelle de RealProxy.

GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
GetUnwrappedServer()

Retourne l'objet serveur représenté par l'instance de proxy en cours.

InitializeServerObject(IConstructionCallMessage)

Initialise une nouvelle instance du Type d'objet de l'objet distant représenté par l'instance actuelle de RealProxy avec le IConstructionCallMessage spécifié.

Invoke(IMessage)

En cas de substitution dans une classe dérivée, appelle la méthode spécifiée dans le IMessage fourni pour l'objet distant représenté par l'instance actuelle.

MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
SetCOMIUnknown(IntPtr)

Stocke un proxy non managé de l'objet représenté par l'instance actuelle.

SetStubData(RealProxy, Object)

Définit les données stub associées au proxy spécifié.

SupportsInterface(Guid)

Demande une interface COM avec l'ID spécifié.

ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

S’applique à

Produit Versions
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1