Vorgehensweise: Überprüfen und Ändern von Nachrichten auf dem Dienst

Sie können die eingehenden oder ausgehenden Nachrichten für einen Windows Communication Foundation (WCF)-Client überprüfen oder ändern, indem Sie einen System.ServiceModel.Dispatcher.IDispatchMessageInspector implementieren und in die Dienstlaufzeit einfügen. Weitere Informationen finden Sie unter Erweitern von Verteilern. Die entsprechende Funktion für den Dienst ist der System.ServiceModel.Dispatcher.IClientMessageInspector.

So überprüfen oder ändern Sie Nachrichten

  1. Implementieren Sie die System.ServiceModel.Dispatcher.IDispatchMessageInspector-Schnittstelle.

  2. Implementieren Sie eine System.ServiceModel.Description.IServiceBehavior-, System.ServiceModel.Description.IEndpointBehavior- oder System.ServiceModel.Description.IContractBehavior-Schnittstelle, je nach dem Umfang, in dem Sie Ihren Dienstnachrichteninspektor auf einfache Weise einfügen möchten.

  3. Fügen Sie Ihr Verhalten ein, bevor Sie die System.ServiceModel.ICommunicationObject.Open-Methode auf dem System.ServiceModel.ServiceHost aufrufen. Weitere Informationen finden Sie unter Konfigurieren und Erweitern der Laufzeit mit Verhalten.

Beispiel

Die unten aufgeführten Codebeispiele zeigen der Reihe nach Folgendes:

  • Eine Dienstinspektorimplementierung.

  • Ein Dienstverhalten, das den Inspektor einfügt.

  • Eine Konfigurationsdatei, die das Verhalten lädt und in einer Dienstanwendung ausführt.

#Region "IDispatchMessageInspector Members"
    Public Function AfterReceiveRequest(ByRef request As System.ServiceModel.Channels.Message, _
                       ByVal channel As IClientChannel, ByVal instanceContext As InstanceContext) _
                       As Object Implements IDispatchMessageInspector.AfterReceiveRequest
        Console.WriteLine("IDispatchMessageInspector.AfterReceiveRequest called.")
        Return Nothing
    End Function

    Public Sub BeforeSendReply(ByRef reply As System.ServiceModel.Channels.Message, ByVal correlationState As Object) _
    Implements IDispatchMessageInspector.BeforeSendReply
        Console.WriteLine("IDispatchMessageInspector.BeforeSendReply called.")
    End Sub
#End Region
#Region "IServiceBehavior Members"
    Public Sub AddBindingParameters(ByVal serviceDescription As ServiceDescription, _
                   ByVal serviceHostBase As ServiceHostBase, ByVal endpoints As  _
                   System.Collections.ObjectModel.Collection(Of ServiceEndpoint), _
                   ByVal bindingParameters As BindingParameterCollection) Implements IServiceBehavior.AddBindingParameters
        Return
    End Sub

    Public Sub ApplyDispatchBehavior(ByVal serviceDescription As ServiceDescription, _
                                     ByVal serviceHostBase As ServiceHostBase) Implements _
                                     IServiceBehavior.ApplyDispatchBehavior
        For Each chDisp As ChannelDispatcher In serviceHostBase.ChannelDispatchers
            For Each epDisp As EndpointDispatcher In chDisp.Endpoints
                epDisp.DispatchRuntime.MessageInspectors.Add(New Inspector())
                For Each op As DispatchOperation In epDisp.DispatchRuntime.Operations
                    op.ParameterInspectors.Add(New Inspector())
                Next op
            Next epDisp
        Next chDisp
    End Sub
<configuration>
  <system.serviceModel>
    <services>
      <service 
        name="Microsoft.WCF.Documentation.SampleService"
        behaviorConfiguration="inspectorBehavior">
        <host>
          <baseAddresses>
            <add baseAddress="https://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>

Siehe auch

Verweis

System.ServiceModel.Dispatcher.IClientMessageInspector
System.ServiceModel.Dispatcher.IDispatchMessageInspector

Konzepte

Konfigurieren und Erweitern der Laufzeit mit Verhalten