Vorgehensweise: Überprüfen oder Ändern von Nachrichten auf dem ClientHow to: Inspect or Modify Messages on the Client

Sie können zu überprüfen oder ändern Sie die eingehenden oder ausgehenden Nachrichten über einen WCF-Client, durch die Implementierung einer System.ServiceModel.Dispatcher.IClientMessageInspector und in die Clientlaufzeit einfügen.You can inspect or modify the incoming or outgoing messages across a WCF client by implementing a System.ServiceModel.Dispatcher.IClientMessageInspector and inserting it into the client runtime. Weitere Informationen finden Sie unter Erweitern von Clients.For more information, see Extending Clients. Die entsprechende Funktion für den Dienst ist der System.ServiceModel.Dispatcher.IDispatchMessageInspector.The equivalent feature on the service is the System.ServiceModel.Dispatcher.IDispatchMessageInspector. Ein vollständiges Codebeispiel finden Sie unter der Nachrichteninspektoren Beispiel.For a complete code example see the Message Inspectors sample.

So überprüfen oder ändern Sie NachrichtenTo inspect or modify messages

  1. Implementieren Sie die System.ServiceModel.Dispatcher.IClientMessageInspector-Schnittstelle.Implement the System.ServiceModel.Dispatcher.IClientMessageInspector interface.

  2. Implementieren Sie ein System.ServiceModel.Description.IEndpointBehavior oder System.ServiceModel.Description.IContractBehavior, je nach dem Bereich, in dem Sie den Clientnachrichteninspektor einfügen möchten.Implement a System.ServiceModel.Description.IEndpointBehavior or System.ServiceModel.Description.IContractBehavior depending upon the scope at which you want to insert the client message inspector. System.ServiceModel.Description.IEndpointBehavior können Sie das Verhalten auf Endpunktebene ändern.System.ServiceModel.Description.IEndpointBehavior allows you to change behavior at the endpoint level. System.ServiceModel.Description.IContractBehavior können Sie das Verhalten auf Vertragsebene ändern.System.ServiceModel.Description.IContractBehavior allows you to change behavior at the contract level.

  3. Fügen Sie das Verhalten ein, bevor Sie die ClientBase<TChannel>.Open-Methode oder die ICommunicationObject.Open-Methode für die System.ServiceModel.ChannelFactory<TChannel> aufrufen.Insert the behavior prior to calling the ClientBase<TChannel>.Open or the ICommunicationObject.Open method on the System.ServiceModel.ChannelFactory<TChannel>. Weitere Informationen finden Sie unter konfigurieren und Erweitern der Laufzeit mit Verhalten.For details, see Configuring and Extending the Runtime with Behaviors.

BeispielExample

Die unten aufgeführten Codebeispiele zeigen der Reihe nach Folgendes:The following code examples show, in order:

  • Eine Clientinspektorimplementierung.A client inspector implementation.

  • Ein Endpunktverhalten, das den Inspektor einfügt.An endpoint behavior that inserts the inspector.

  • Eine von BehaviorExtensionElement abgeleitete Klasse, mit der Sie das Verhalten einer Konfigurationsdatei hinzufügen können.A BehaviorExtensionElement- derived class that allows you to add the behavior in a configuration file.

  • Eine Konfigurationsdatei, die das Endpunktverhalten hinzufügt, das den Clientnachrichteninspektor in die Clientlaufzeit einfügt.A configuration file that adds the endpoint behavior which inserts the client message inspector into the client runtime.

// Client message inspector  
public class SimpleMessageInspector : IClientMessageInspector  
{  
    public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)  
    {  
        // Implement this method to inspect/modify messages after a message  
        // is received but prior to passing it back to the client   
        Console.WriteLine("AfterReceiveReply called");  
    }  

    public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel)  
    {  
        // Implement this method to inspect/modify messages before they   
        // are sent to the service  
        Console.WriteLine("BeforeSendRequest called");  
        return null;  
    }  
}  
// Endpoint behavior  
public class SimpleEndpointBehavior : IEndpointBehavior  
{  
    public void AddBindingParameters(ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)  
    {  
         // No implementation necessary  
    }  

    public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)  
    {  
        clientRuntime.MessageInspectors.Add(new SimpleMessageInspector());  
    }  

    public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)  
    {  
         // No implementation necessary  
    }  

    public void Validate(ServiceEndpoint endpoint)  
    {  
         // No implementation necessary  
    }  
}  
// Configuration element   
public class SimpleBehaviorExtensionElement : BehaviorExtensionElement  
{  
    public override Type BehaviorType  
    {  
        get { return typeof(SimpleEndpointBehavior); }  
    }  

    protected override object CreateBehavior()  
    {  
         // Create the  endpoint behavior that will insert the message  
         // inspector into the client runtime  
        return new SimpleEndpointBehavior();  
    }  
}  
<?xml version="1.0" encoding="utf-8" ?>  
<configuration>  
    <system.serviceModel>  
        <client>  
            <endpoint address="http://localhost:8080/SimpleService/"   
                      binding="wsHttpBinding"  
                      contract="ServiceReference1.IService1"  
                      name="WSHttpBinding_IService1"/>  
        </client>  

      <behaviors>  
        <endpointBehaviors>  
          <behavior name="clientInspectorsAdded">  
            <simpleBehaviorExtension />  
          </behavior>  
        </endpointBehaviors>  
      </behaviors>  
      <extensions>  
        <behaviorExtensions>  
          <add  
            name="simpleBehaviorExtension"  
            type="SimpleServiceLib.SimpleBehaviorExtensionElement, Host, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"/>  
        </behaviorExtensions>  
      </extensions>  
    </system.serviceModel>  
</configuration>  

Siehe auchSee Also

System.ServiceModel.Dispatcher.IClientMessageInspector
System.ServiceModel.Dispatcher.IDispatchMessageInspector
Konfigurieren und Erweitern der Laufzeit mit VerhaltenConfiguring and Extending the Runtime with Behaviors