2010-09-15 5 views
2

Je souhaite modifier dynamiquement l'adresse d'un service WCF appelé depuis mon client en fonction des informations personnalisées dans le fichier de configuration de l'application du client.Modification dynamique de l'adresse du point de terminaison WCF à l'aide d'un comportement

Ma première tentative était de créer un comportement de point final, et mettre en œuvre la méthode IEndpointBehavior.Validate, mis en œuvre quelque chose comme ce qui suit:

void IEndpointBehavior.Validate(ServiceEndpoint endpoint) 
{ 
    ... endpoint.Address = new EndpointAddress(...); 
} 

Cette méthode est appelée avant que le client tente de se connecter, et semble changer avec succès adresse de point de terminaison. Toutefois, l'infrastructure WCF semble toujours tenter la connexion en utilisant l'adresse d'origine.

Y at-il un moyen d'y parvenir en utilisant un comportement de point de terminaison ou un autre point d'extension WCF?

+0

Pourquoi ne pas simplement utiliser le constructeur de classe proxy qui prend un 'EndPointAddress'? –

+0

Je ne peux pas réaliser ce que je veux en utilisant le constructeur de la classe proxy (en fait dans mon cas un constructeur ChannelFactory ) parce qu'à ce stade je ne sais pas encore quelle adresse utiliser. – Joe

+1

Comment ne pas connaître l'adresse au moment de la création du proxy? –

Répondre

2

Je pense que le problème est la fonctionnalité de base de CommunicationObject. Lorsque l'objet de communication passe à l'état Ouvert, il ne peut rien changer. Donc, si votre objet de communication (Channel ou ChannelFactory) est déjà en état ouvert, vous ne pouvez pas changer d'adresse.

+0

Cela semble plausible. Vraisemblablement, IEndpointBehavior.Validate est exécuté trop tard, après l'ouverture de ChannelFactory. Je me demande s'il existe d'autres points d'extension qui me permettent d'attacher un comportement au point final avant l'ouverture de ChannelFactory, afin que je puisse atteindre mon objectif. – Joe

Questions connexes