3 votes

Comment ajouter un comportement de point de terminaison à un service WCF hébergé dans IIS

Je dispose d'un service WCF hébergé sur IIS et j'ai besoin d'ajouter un comportement d'endpoint. Je ne peux pas simplement l'ajouter à web.config. (Nous devons prendre en charge une architecture de plugin et les rédacteurs de plugins n'auront pas accès à mon web.config.) J'ai essayé de mettre ceci dans le constructeur statique du service :

var endpointDispatcher = OperationContext.Current.EndpointDispatcher;
SilverlightFaultMessageInspector inspector = new SilverlightFaultMessageInspector();
endpointDispatcher.DispatchRuntime.MessageInspectors.Add(inspector);

mais cela lance une exception disant "Cette valeur ne peut pas être modifiée après l'ouverture de ServiceHost." Si j'appelle host.Close() avant d'ajouter l'objet inspecteur, il lance toujours la même exception.

J'ai également essayé ceci :

var host = OperationContext.Current.Host;
host.Description.Endpoints[0].Behaviors.Add(new SilverlightFaultBehavior());

mais cela semble ne pas avoir d'effet. Le comportement d'endpoint n'est jamais appelé.

Est-il possible d'ajouter un comportement d'endpoint à un service WCF hébergé sur IIS ?

2voto

Ladislav Mrnka Points 218632

Le comportement du point de terminaison ne peut être ajouté que avant que ServiceHost ne soit ouvert (démarre l'hébergement du service). Il nécessite donc de réinitialiser votre service. L'accès à ServiceHost pour les services hébergés dans IIS se fait à travers ServicHostFactory personnalisée qui doit être définie dans le fichier .svc. Vous avez généralement besoin de quelque chose comme une ServiceHostFactory personnalisée qui chargera les comportements à partir d'un référentiel et les utilisera dans la méthode CreateServiceHost. Les comportements ne seront appliqués qu'après le redémarrage de l'application.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X