Extension de la classe RealProxy

Cette rubrique est spécifique à la technologie héritée assurant la compatibilité descendante avec des applications existantes et n'est pas recommandée en cas de nouveau développement. Les applications distribuées doivent maintenant être développées à l'aide de Windows Communication Foundation (WCF).

L'extension du proxy peut être utile si vous souhaitez notamment participer au processus de la création du proxy, marshaler des appels de méthode distants ou déterminer l'identité d'un objet. Vous pouvez générer votre propre proxy à l'aide de la classe RealProxy extensible. La génération d'un proxy personnalisé implique de dériver une classe de la classe RealProxy et de substituer la méthode RealProxy.Invoke. L'instruction new (New en Visual Basic) peut être interceptée en la 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é, le ProxyAttribute dérivé crée une instance du proxy personnalisé. Une application peut également créer directement une instance de proxy personnalisée.

Lorsque le code d'application appelle une méthode sur un proxy personnalisé, la méthode RealProxy.Invoke remplacée est appelée avec un objet qui implémente IMessage. L'implémentation IMessage assure une implémentation IDictionary qui fournit les couples d'information nom/valeur à propos de la méthode. Pour plus d'informations sur les entrées particulières dans le 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 Invoke remplacée en appelant RemotingServices.ExecuteMessage, qui se charge de distribuer 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. Il est possible, en outre, de recourir à la méthode RealProxy.InitializeServerObject pour créer l'objet de stockage (objet représenté par le proxy).

En cas d'utilisation du ProxyAttributedérivé, vous pouvez créer un objet réel dans la méthode ProxyAttribute.CreateInstance remplacée et le stocker comme un champ dans le proxy personnalisé. Le proxy personnalisé peut marshaler l'objet réel pour obtenir l'objet ObjRef qui contient l'URI. L'URI doit être stockée dans le proxy, car l'entrée « __Uri » dans la collection retournée par la propriété IMessage.Properties doit être définie dans l'implémentation IMessage afin de distribuer un appel vers un objet réel.

Bien entendu, le message n'a pas besoin d'être distribué vers un objet réel ; vous pouvez effectuer certaines tâches avec cet objet dans Invoke et 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 au ObjRefpersonnalisé, substituez **** ObjRef.GetObjectData. Vous ajoutez vos données personnalisées et déléguez à la méthode ObjRef.GetObjectData pour modifier les fonctions de l'identité de l'objet du système de marshaling .NET Remoting.

Pendant la désérialisation, le système de communication à distance appelle votre GetRealObject remplacé sur le ObjRef personnalisé. Il convient alors de déléguer à la méthode de base GetRealObject, car celle-ci gère l'identité d'objet et configure les canaux de communication à distance. La base appelle également votre méthode ProxyAttribute.CreateProxy remplacée pour vous permettre de configurer votre proxy personnalisé.

ObjRef.IsFromThisAppDomain et ObjRef.IsFromThisProcess peuvent être utilisés pour déterminer la façon dont vous souhaitez annuler le marshaling.

Notez que si vous ne fournissez pas d'ObjRef personnalisé pendant le marshaling, le système de communication à distance marshale automatiquement et annule automatiquement le marshaling de l'objet et le proxy personnalisé n'est pas utilisé dans le domaine d'application de l'appelant.

Voir aussi

Tâches

Proxies personnalisés, exemple de technologie

Référence

RealProxy
ProxyAttribute
RemotingServices
IMessage
IMethodReturnMessage
IMethodCallMessage

Autres ressources

Communication à distance avancée