2010-05-30 25 views
3

Je cherche à insérer un comportement personnalisé dans mon client de service, à l'instar here.Définition du comportement de liaison WCF personnalisé via le fichier .config - pourquoi cela ne fonctionne-t-il pas?

Je semblent suivre toutes les étapes, mais je reçois un ConfigurationErrorsException. Y a-t-il quelqu'un de plus expérimenté que moi qui puisse voir ce que je fais de mal?

Voici l'intégralité du fichier app.config.

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <system.serviceModel> 
     <behaviors> 
      <endpointBehaviors> 
       <behavior name="ClientLoggingEndpointBehaviour"> 
        <myLoggerExtension /> 
       </behavior> 
      </endpointBehaviors> 
     </behaviors> 
     <extensions> 
      <behaviorExtensions> 
       <add name="myLoggerExtension" 
        type="ChatClient.ClientLoggingEndpointBehaviourExtension, ChatClient, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"/> 
      </behaviorExtensions> 
     </extensions> 
     <bindings> 
     </bindings> 
     <client> 
      <endpoint 
       behaviorConfiguration="ClientLoggingEndpointBehaviour" 
       name="ChatRoomClientEndpoint" 
       address="http://localhost:8016/ChatRoom" 
       binding="wsDualHttpBinding" 
       contract="ChatRoomLib.IChatRoom" 
       /> 
     </client> 
    </system.serviceModel> 
</configuration> 

Voici le message d'exception:

Une erreur est survenue la création du gestionnaire de section de configuration pour system.serviceModel/comportements: élément extension 'myLoggerExtension' ne peut pas être ajouté à cet élément. Vérifiez que l'extension est enregistrée dans la collection d'extension à system.serviceModel/extensions/behaviorExtensions. Nom du paramètre: élément (C: \ Documents and Settings \ Andrew Shepherd \ Mes Documents \ Visual Studio 2008 \ Projects \ WcfPractice \ ChatClient \ bin \ Debug \ ChatClient.vshost.exe.config ligne 5)

Je sais que j'ai écrit correctement la référence à l'objet ClientLoggingEndpointBehaviourExtension, car à travers le débogueur, je peux voir qu'il est instancié.

Répondre

0

Il se trouve que je n'ai pas l'assemblée nom qualifié EXACTEMENT droit. Le nom qualifié de l'assembly était correct pour le chargement du framework .NET, mais l'infrastructure WCF effectuait une comparaison naïve caractère par caractère lors de la correspondance des configurations de comportement.

pour finalement obtenir le nom du type exact, je l'ai écrit du code pour créer une instance de ClientLoggingEndpointBehaviourExtension objet, et écrit la AssemblyQualifiedName propriété à une variable locale, que je puis copier-collé de la fenêtre de débogage dans le fichier. fichier de configuration.

Que j'ai dû faire tout cela est considéré comme un bug dans le cadre de la WCF. (Voir this link) Apparemment, il est corrigé dans .NET 4.0.

Voir aussi this article.

0

Ceci est un peu une pensée aléatoire, mais peut-être pas: inverser l'ordre des éléments dans votre config afin que les extensions viennent avant les comportements.

-Oisin

+0

Sons comme une estimation raisonnable, mais non, l'erreur est la même. –