RealProxy Classe

Definizione

Fornisce la funzionalità di base dei proxy.

C#
public abstract class RealProxy
C#
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class RealProxy
C#
[System.Runtime.InteropServices.ComVisible(true)]
[System.Security.SecurityCritical]
public abstract class RealProxy
Ereditarietà
RealProxy
Attributi

Esempio

C#
// 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;
   }
}

Commenti

La RealProxy classe è la abstract classe di base da cui devono derivare i proxy.

Un client che usa un oggetto in qualsiasi tipo di limite di comunicazione remota usa effettivamente un proxy trasparente per l'oggetto. Il proxy trasparente fornisce l'illusione che l'oggetto effettivo si trovi nello spazio del client. Ottiene questo risultato inoltrando le chiamate effettuate all'oggetto reale usando l'infrastruttura di comunicazione remota.

Il proxy trasparente è ospitato da un'istanza di una classe di runtime gestita di tipo RealProxy. L'oggetto RealProxy implementa una parte della funzionalità necessaria per inoltrare le operazioni dal proxy trasparente. Si noti che un oggetto proxy eredita la semantica associata di oggetti gestiti, ad esempio Garbage Collection, il supporto per campi e metodi e può essere esteso per formare nuove classi. Il proxy ha una doppia natura: funge da oggetto della stessa classe dell'oggetto remoto (proxy trasparente) ed è un oggetto gestito stesso.

Un oggetto proxy può essere usato senza considerare eventuali suddivisioni remoti all'interno di un AppDomainoggetto .

Nota

Questa classe rende una richiesta di collegamento e una richiesta di ereditarietà a livello di classe. Viene SecurityException generato quando il chiamante immediato o la classe derivata non dispone dell'autorizzazione dell'infrastruttura. Per informazioni dettagliate sulle richieste di sicurezza, vedere Collegare richieste e richieste di ereditarietà.

Note per gli implementatori

Quando si eredita da RealProxy, è necessario eseguire l'override del Invoke(IMessage) metodo.

Costruttori

RealProxy()

Inizializza una nuova istanza della classe RealProxy con i valori predefiniti.

RealProxy(Type)

Inizializza una nuova istanza della classe RealProxy che rappresenta un oggetto remoto del Type specificato.

RealProxy(Type, IntPtr, Object)

Inizializza una nuova istanza della classe RealProxy.

Metodi

AttachServer(MarshalByRefObject)

Aggiunge l'istanza del proxy corrente all'oggetto remoto MarshalByRefObject specificato.

CreateObjRef(Type)

Crea un oggetto ObjRef per il tipo di oggetto specificato e lo registra con l'infrastruttura remota come oggetto attivato dal client.

DetachServer()

Disconnette l'istanza del proxy corrente dall'oggetto server remoto che essa rappresenta.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetCOMIUnknown(Boolean)

Richiede un riferimento non gestito all'oggetto rappresentato dall'istanza del proxy corrente.

GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetObjectData(SerializationInfo, StreamingContext)

Aggiunge il proxy trasparente dell'oggetto rappresentato dall'istanza corrente del RealProxy all'oggetto SerializationInfo specificato.

GetProxiedType()

Restituisce il Type dell'oggetto rappresentato dall'istanza corrente del RealProxy.

GetStubData(RealProxy)

Recupera i dati stub archiviati per il proxy specificato.

GetTransparentProxy()

Restituisce il proxy trasparente per l'istanza corrente del RealProxy.

GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
GetUnwrappedServer()

Restituisce l'oggetto server rappresentato dall'istanza del proxy corrente.

InitializeServerObject(IConstructionCallMessage)

Inizializza una nuova istanza del Type dell'oggetto remoto rappresentato dall'istanza corrente del RealProxy con l'oggetto IConstructionCallMessage specificato.

Invoke(IMessage)

Quando se ne esegue l'override in una classe derivata, richiama il metodo specificato nell'oggetto IMessage fornito sull'oggetto remoto rappresentato dall'istanza corrente.

MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
SetCOMIUnknown(IntPtr)

Archivia un proxy non gestito dell'oggetto rappresentato dall'istanza corrente.

SetStubData(RealProxy, Object)

Imposta i dati stub per il proxy specificato.

SupportsInterface(Guid)

Richiede un'interfaccia COM con l'ID specificato.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a

Prodotto Versioni
.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