2010-08-19 6 views
12

io a implementarlo IDispatchMessageInspector.AfterReciveRequest Poi ho configurato in questo modo: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> 

ma non funziona.

il check-nel mio assemblaggio e nel mio locale di riferimento e ho rovinato trovato Microsoft.WCF.Documentation.InspectorInserter o HostApplication dll che cerco in rete per scaricare HostApplication dll ma non ho trovato nulla.

Cosa devo fare?

Ho bisogno di implementare più cose o Ho solo bisogno di questa configurazione.

+0

La configurazione non è completa. Invia configurazione completa, codice ispettore e codice comportamento. Elimina anche quei due post vuoti. –

risposta

22

Ho trovato molto più semplice collegare l'implementazione IDispatchMessageInspector utilizzando un'implementazione IServiceBehavior che estende anche l'attributo. Quindi, nel metodo ApplyDispatchBehavior, collega l'ispettore messaggi a tutti gli endpoint in tutti i canali.

Questo article mi ha aiutato molto.

codice Esempio:

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()); 
    } 
} 

Poi per l'attuazione del contratto di servizio, si può semplicemente aggiungere l'attributo alla classe.

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

+1 WCF sarebbe del tutto inutilizzabile senza StackOverflow :) – Andomar

+0

Sì, è molto spiacevole quanto sia grave la documentazione. – MonkeyWrench

+1

Penso che ci sia un buon business case per wcf.stackexchange.com – arcain