2009-07-21 8 views
0

J'ai écrit un MessageEncoder personnalisé pour un pipeline WCF, qui est ensuite appliqué à l'aide d'un BindingElementExtensionElement dans mon app.config.MessageEncoder personnalisé WCF nécessite un comportement personnalisé

Sur le serveur, lorsqu'un message arrive, mon encodeur de message doit extraire des informations du flux et les conserver pendant la durée du contexte d'opération, afin qu'elles puissent être renvoyées en tant qu'en-tête dans la réponse. La manipulation de l'en-tête crie la fonctionnalité de comportement, donc ... Je voudrais savoir, comment puis-je obtenir mon encodeur personnalisé pour appliquer également un comportement personnalisé au pipeline (où je prendrai soin de stocker cette 'information' spéciale dans un contexte d'opération) - le codeur est essentiellement inutile sans le comportement, donc je ne veux pas compter sur l'utilisateur qui se souvient d'ajouter la configuration du comportement quand il ajoute la configuration de l'encodeur - cela devrait se faire automatiquement sous les couvertures.

En outre, où est une bonne ressource pour lire sur le cycle de vie de ces éléments de pipeline?

Merci

Répondre

0

Vous avez fondamentalement deux options:

1) soit vous exposer votre comportement via un attribut, de sorte qu'il peut être ajouté au fichier de configuration du serveur - quelque chose comme ceci:

<system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="Default"> 
      <YourCustomMessageEncoderBehavior /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 

2) ou vous pouvez créer votre propre coutume ServiceHost qui fait en sorte d'ajouter ce comportement à la liste des comportements d'expédition si ce n'est pas déjà là.

class YourCustomServiceHost : ServiceHost 
{ 
    public YourCustomServiceHost(Type serviceType, params Uri[] baseAddresses) 
      : base(serviceType, baseAddresses) { } 

    protected override void ApplyConfiguration() 
    { 
     base.ApplyConfiguration();  

     YourCustomMessageEncodingBehavior behavior = 
      this.Description.Behaviors.Find<YourCustomMessageEncodingBehavior>(); 

     if (behavior == null) 
     { 
      behavior = new YourCustomMessageEncodingBehavior(); 
      this.Description.Behaviors.Add(behavior); 
     } 
     else 
     { 
      return; 
     } 
    } 
} 

Marc

Questions connexes