Condividi tramite


Estensione di RealProxy

L'estensione del proxy può essere utile quando si vuole partecipare nel processo di creazione del proxy, effettuare il marshalling di chiamate al metodo remote, o determinare l'identità dell'oggetto, fra le altre cose. È possibile creare un proxy utilizzando la classe estendibile RealProxy. Per creare un proxy personalizzato è necessario derivare una classe dalla classe frlrfSystemRuntimeRemotingProxiesRealProxyClassTopicRealProxy ed eseguire l'override del metodo RealProxy.Invoke. È possibile intercettare l'istruzione new (Newin Visual Basic) derivando dall'attributo ProxyAttribute e applicando l'attributo a un figlio di ContextBoundObject. (L'applicazione dell'attributo del proxy a un figlio di MarshalByRefObject non è consentita.) Quando viene chiamata l'istruzione new, il ProxyAttribute derivato crea un'istanza del proxy personalizzato. Un'applicazione può anche creare un'istanza del proxy personalizzato direttamente.

Quando il codice dell'applicazione chiama un metodo su un proxy personalizzato, il metodo RealProxy.Invoke sottoposto a override viene chiamato con un oggetto che implementa IMessage. L'implementazione di frlrfSystemRuntimeRemotingMessagingIMessageClassTopicIMessage fornisce un implementazione IDictionary che fornisce coppie nome/valore di informazioni sul metodo. Per ulteriori informazioni su specifiche voci del dizionario, vedere la documentazione di riferimento per l'interfaccia IMessage e interfacce correlate (IMethodCallMessage e IMethodReturnMessage).

Un oggetto reale può essere chiamato dal metodo Invoke sottoposto a override chiamando RemotingServices.ExecuteMessage che invia la chiamata all'oggetto reale.

È inoltre possibile utilizzare il metodo EnterpriseServicesHelper.CreateConstructionReturnMessage per elaborare un oggetto IConstructionCallMessage e generare un oggetto IConstructionReturnMessage. È inoltre possibile utilizzare il metodo RealProxy.InitializeServerObject per creare l'oggetto di backup (l'oggetto rappresentato dal proxy).

Quando si utilizza l'attributo derivato ProxyAttribute, è possibile creare un oggetto reale nel metodo ProxyAttribute.CreateInstance sottoposto a override e archiviarlo come campo nel proxy personalizzato. Il proxy personalizzato può effettuare il marshalling dell'oggetto reale per ottenere l'oggetto ObjRef che contiene l'URI (Uniform Resource Identifier). L'URI deve essere archiviato nel proxy, perché la voce "__Uri" nell'insieme restituito dalla proprietà IMessage.Properties deve essere impostata nell'implementazione IMessage per inviare una chiamata a un oggetto reale.

Chiaramente, il messaggio non deve essere obbligatoriamente inviato a un vero oggetto; è possibile eseguire alcune attività in Invoke e generare e restituire un oggetto che implementa l'interfaccia IMethodReturnMessage).

Per partecipare al marshalling, eseguire l'override di RealProxy.CreateObjRef e fornire un ObjRef**** personalizzato che estende ObjRef. Se si desidera aggiungere dati personalizzati all'ObjRef personalizzato, eseguire l'override di ****frlrfSystemRuntimeRemotingObjRefClassGetObjectDataTopic. Si aggiungono i dati personalizzati e si delega al metodo ObjRef.GetObjectData di modificare le funzionalità di identità dell'oggetto del sistema di marshalling .NET Remoting.

Durante la deserializzazione, il sistema .NET Remoting chiama il metodo GetRealObject sottoposto a override su ObjRef personalizzato. Qui è necessario delegare al metodo GetRealObject di base perché la base gestisce l'identità dell'oggetto e imposta i canali .NET Remoting. La base chiama inoltre il metodo ProxyAttribute.CreateProxy sottoposto a override per consentire l'impostazione del proxy personalizzato.

ObjRef.IsFromThisAppDomain e ObjRef.IsFromThisProcess possono essere utilizzati per determinare la modalità di unmarshalling.

Si noti che se non si fornisce un ObjRef personalizzato durante il marshalling, il sistema .NET Remoting effettuerà automaticamente il marshalling e l'unmarshalling dell'oggetto e il proxy personalizzato non verrà utilizzato nel dominio applicazione del chiamante.

Vedere anche

Riferimenti

RealProxy
ProxyAttribute
RemotingServices
IMessage
IMethodReturnMessage
IMethodCallMessage

Altre risorse

.NET Remoting avanzato
Custom Proxies Technology Sample

Footer image

Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.