2010-08-19 1 views
12

I Implement IDispatchMessageInspector.AfterReciveRequest Dann konfiguriere ich wie folgt aus: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> 

aber es funktioniert nicht.

prüfe ich in meiner Montage und in meinem lokalen Bezug und ich habe nicht Microsoft.WCF.Documentation.InspectorInserter oder HostApplication dll Ich suche im Netz gefunden HostApplication dll herunterladen, aber ich fand nichts.

Was muss ich tun?

Ich muss mehr implementieren, oder ich brauche nur diese Konfiguration.

+0

Ihre Konfiguration ist nicht vollständig. Vervollständigen Sie die Konfiguration, den Inspektorcode und den Verhaltenscode. Löschen Sie auch diese zwei leeren Posts. –

Antwort

22

Ich fand es viel einfacher, meine IDispatchMessageInspector-Implementierung mithilfe einer IServiceBehavior-Implementierung, die auch Attribut erweitert. Fügen Sie dann in der ApplyDispatchBehavior-Methode Ihren Nachrichteninspektor an alle Endpunkte in allen Kanälen an.

Diese article hat mir sehr geholfen.

Beispielcode:

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

Dann bei der Umsetzung Ihres Servicevertrags, können Sie einfach das Attribut der Klasse hinzuzufügen.

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

+1 WCF wäre ohne StackOverflow völlig unbrauchbar :) – Andomar

+0

Yup, es ist sehr bedauerlich, wie schlecht einige der Dokumentation ist. – MonkeyWrench

+1

Ich denke, es gibt einen guten Geschäftsfall für wcf.stackexchange.com – arcain

Verwandte Themen