Condividi tramite


Estensione di RealProxy

Questo argomento è specifico di una tecnologia legacy mantenuta per una questione di compatibilità con le applicazioni esistenti di versioni precedenti e non è consigliato per il nuovo sviluppo. Le applicazioni distribuite devono ora essere sviluppate utilizzando  Windows Communication Foundation (WCF).

L'estensione del proxy può essere utile quando si desidera partecipare al processo di creazione del proxy, effettuare il marshalling di chiamate al metodo remote o determinare l'identità dell'oggetto. È possibile compilare un proxy utilizzando la classe estendibile RealProxy. Per compilare un proxy personalizzato è necessario derivare una classe dalla classe frlrfSystemRuntimeRemotingProxiesRealProxyClassTopicRealProxy ed eseguire l'override del metodo RealProxy.Invoke. È possibile intercettare l'istruzione new (New in 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" nella raccolta restituita 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

Attività

Esempio relativo alle tecnologie dei proxy personalizzati

Riferimento

RealProxy
ProxyAttribute
RemotingServices
IMessage
IMethodReturnMessage
IMethodCallMessage

Altre risorse

.NET Remoting avanzato