Partager via


Extension de la classe RealProxy

L'extension du proxy peut être utile lorsque vous souhaitez participer au processus de création du proxy, marshaler des appels de méthodes distantes ou déterminer identité d'un objet, entre autres. Vous pouvez générer votre propre proxy à l'aide de la classe extensible RealProxy. La génération d'un proxy personnalisé implique de dériver une classe de la classe frlrfSystemRuntimeRemotingProxiesRealProxyClassTopicRealProxyet de substituer la méthode RealProxy.Invoke. L'instruction new (New dans Visual Basic) peut être interceptée en dérivant de l'attribut ProxyAttribute et en appliquant l'attribut à un enfant de ContextBoundObject. (L'application de l'attribut proxy à un enfant de MarshalByRefObject n'est pas prise en charge.) Lorsque new est appelé, l'attribut dérivé ProxyAttribute crée une instance du proxy personnalisé. Une application peut également créer directement une instance d'un proxy personnalisé.

Lorsque le code de l'application appelle une méthode sur un proxy personnalisé, la méthode substituée RealProxy.Invoke est appelée avec un objet qui implémente IMessage. L'implémentation d'frlrfSystemRuntimeRemotingMessagingIMessageClassTopicIMessage fournit une implémentation IDictionary qui fournit des paires nom/valeur d'informations à propos de la méthode. Pour plus d'informations sur certaines entrées du dictionnaire, consultez la documentation de référence pour l'interface IMessage et les interfaces connexes (IMethodCallMessage et IMethodReturnMessage).

Un objet réel peut être appelé à partir de la méthode substituée Invoke en appelant RemotingServices.ExecuteMessage, qui distribue l'appel à l'objet réel.

Vous pouvez également utiliser la méthode EnterpriseServicesHelper.CreateConstructionReturnMessage pour traiter un objet IConstructionCallMessage et générer un objet IConstructionReturnMessage. Vous pouvez également utiliser la méthode RealProxy.InitializeServerObject pour créer l'objet de sauvegarde (l'objet représenté par le proxy).

Lorsque vous utilisez l'attribut dérivé ProxyAttribute, vous pouvez créer un objet réel dans la méthode substituée ProxyAttribute.CreateInstance et le stocker en tant que champ dans le proxy personnalisé. Le proxy personnalisé peut marshaler l'objet réel afin d'obtenir l'objet ObjRef qui contient l'URI (Uniform Resource Identifier). L'URI doit être stocké dans le proxy, car l'entrée « __Uri » de la collection retournée par la propriété IMessage.Properties doit être définie dans l'implémentation IMessage pour diriger un appel vers un véritable objet.

Bien entendu, le message ne doit pas être distribué à un objet réel, vous pouvez l'utiliser pour exécuter quelques tâches dans Invoke, puis générer et retourner un objet qui implémente l'interface IMethodReturnMessage).

Pour participer au marshaling, substituez RealProxy.CreateObjRef et fournissez un ObjRef personnalisé**** qui étend ObjRef. Si vous souhaitez ajouter des données personnalisées à l' ObjRef personnalisé, substituez ****frlrfSystemRuntimeRemotingObjRefClassGetObjectDataTopic. Pour modifier les fonctions d'identité de l'objet du système de marshaling d'accès distant .NET, ajoutez vos données et délégués personnalisés à la méthode ObjRef.GetObjectData

Pendant la désérialisation, le système distant appelle votre GetRealObject substitué sur l'ObjRef personnalisé. Ici, vous devez déléguer à la méthode de base GetRealObject, car la base gère l'identité de l'objet et configure les canaux d'accès distant. La base appelle également votre méthode ProxyAttribute.CreateProxy substituée pour vous permettre de configurer votre proxy personnalisé.

ObjRef.IsFromThisAppDomain et ObjRef.IsFromThisProcess peuvent être utilisés pour déterminer comment vous souhaitez procéder à la désorganisation.

Notez que si vous ne fournissez pas d'ObjRef personnalisé pendant le marshaling, le système d'accès distant marshale et désorganise automatiquement l'objet. De plus, le proxy personnalisé n'est pas utilisé dans le domaine d'application de l'appelant.

Voir aussi

Référence

RealProxy
ProxyAttribute
RemotingServices
IMessage
IMethodReturnMessage
IMethodCallMessage

Autres ressources

Accès distant avancé
Custom Proxies Technology Sample

Footer image

Copyright ©2007 par Microsoft Corporation. Tous droits réservés.