Sdílet prostřednictvím


Postupy: Kontrola a změny zpráv v klientovi

Příchozí nebo odchozí zprávy v klientovi WCF můžete zkontrolovat nebo upravit implementací System.ServiceModel.Dispatcher.IClientMessageInspector a vložením do modulu runtime klienta. Další informace naleznete v tématu Rozšíření klientů. Ekvivalentní funkce ve službě je System.ServiceModel.Dispatcher.IDispatchMessageInspector. Kompletní příklad kódu najdete v ukázce kontroly zpráv.

Kontrola nebo úprava zpráv

  1. Implementujte rozhraní System.ServiceModel.Dispatcher.IClientMessageInspector.

  2. System.ServiceModel.Description.IEndpointBehaviorSystem.ServiceModel.Description.IContractBehavior Implementujte nebo v závislosti na oboru, do kterého chcete vložit kontrolu zpráv klienta. System.ServiceModel.Description.IEndpointBehavior umožňuje změnit chování na úrovni koncového bodu. System.ServiceModel.Description.IContractBehavior umožňuje změnit chování na úrovni kontraktu.

  3. Vložte chování před voláním ClientBase<TChannel>.Open metody ICommunicationObject.Open v objektu System.ServiceModel.ChannelFactory<TChannel>. Podrobnosti najdete v tématu Konfigurace a rozšíření modulu runtime pomocí chování.

Příklad

Následující příklady kódu ukazují v pořadí:

  • Implementace kontroly klienta.

  • Chování koncového bodu, které vloží inspektor.

  • A BehaviorExtensionElement– odvozená třída, která umožňuje přidat chování v konfiguračním souboru.

  • Konfigurační soubor, který přidává chování koncového bodu, které vloží inspektor zpráv klienta do modulu runtime klienta.

// 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"
                      behaviorConfiguration="clientInspectorsAdded"
                      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>  

Viz také