2010-08-19 16 views
12

implémenter la IDispatchMessageInspector.AfterReciveRequest Je configure comme ceci:IDIspatchMessageInspector

<configuration> 
    <system.serviceModel> 
    <services> 
     <service 
     name="Microsoft.WCF.Documentation.SampleService" 
     behaviorConfiguration="inspectorBehavior"> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8080/SampleService" /> 
      </baseAddresses> 
     </host> 
     <endpoint 
      address="" 
      binding="wsHttpBinding" 
      contract="Microsoft.WCF.Documentation.ISampleService" 
     /> 

     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="inspectorBehavior"> 
      <serviceInspectors /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <extensions> 
     <behaviorExtensions> 
     <add 
      name="serviceInspectors" 
      type="Microsoft.WCF.Documentation.InspectorInserter, HostApplication, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null" 
     /> 
     </behaviorExtensions> 
    </extensions> 
    </system.serviceModel> 
</configuration> 

mais il ne fonctionne pas.

je vérifie dans mon assemblée et dans ma référence locale et je na pas trouvé Microsoft.WCF.Documentation.InspectorInserter ou HostApplication dll Je recherche dans le filet pour télécharger HostApplication dll mais je ne trouve rien.

Que dois-je faire?

Je dois mettre en œuvre plus de chose ou j'ai juste besoin de cette configuration.

+0

Votre configuration n'est pas terminée. Post-configuration complète, code d'inspecteur et code de comportement. Supprimez également ces deux posts vides. –

Répondre

22

J'ai trouvé beaucoup plus facile de joindre mon implémentation IDispatchMessageInspector à l'aide d'une implémentation IServiceBehavior qui étend également Attribute. Ensuite, dans la méthode ApplyDispatchBehavior, attachez votre inspecteur de message à tous les points de terminaison de tous les canaux. Ce article m'a énormément aidé.

code Exemple:

public class MyServiceBehavior : Attribute, IServiceBehavior 
{ 
    public void ApplyDispatchBehavior(ServiceDescription serviceDescription, 
     ServiceHostBase serviceHostBase) 
    { 
     foreach(ChannelDispatcher cDispatcher in serviceHostBase.ChannelDispatchers) 
      foreach(EndpointDispatcher eDispatcher in cDispatcher.Endpoints) 
       eDispatcher.DispatchRuntime.MessageInspectors.Add(new RequestAuthChecker()); 
    } 
} 

Puis, dans la mise en œuvre de votre contrat de service, vous pouvez simplement ajouter l'attribut à la classe.

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
[MyServiceBehavior] 
public class ContractImplementation : IServiceContract 
{ 
+26

+1 WCF serait totalement inutilisable sans StackOverflow :) – Andomar

+0

Yup, c'est très malheureux à quel point une partie de la documentation est. – MonkeyWrench

+1

Je pense qu'il y a une bonne analyse de rentabilisation pour wcf.stackexchange.com – arcain