Partager via


Comment : inspecter ou modifier des messages sur le client

Vous pouvez inspecter ou modifier les messages entrants ou sortants sur un client WCF en implémentant un System.ServiceModel.Dispatcher.IClientMessageInspector et en l'insérant dans l'exécution du client. Pour plus d'informations, consultez Extension de clients. La fonctionnalité équivalente sur le service est System.ServiceModel.Dispatcher.IDispatchMessageInspector.

Pour inspecter ou modifier des messages

  1. Implémentez l'interface System.ServiceModel.Dispatcher.IClientMessageInspector.

  2. Implémentez System.ServiceModel.Description.IEndpointBehavior ou System.ServiceModel.Description.IContractBehavior en fonction de la portée à laquelle vous souhaitez insérer facilement votre inspecteur de message client.

  3. Insérez votre comportement avant d'appeler la méthode System.ServiceModel.ClientBase.Open ou System.ServiceModel.ICommunicationObject.Open sur System.ServiceModel.ChannelFactory. Pour plus d'informations, consultez Configuration et extension de l'exécution à l'aide de comportements.

Exemple

Les exemples de code suivants affichent, dans l'ordre :

  • Une implémentation d'inspecteur client.

  • Un comportement de point de terminaison qui insère l'inspecteur.

  • Un fichier de configuration qui charge et exécute le comportement dans une application cliente.

#Region "IClientMessageInspector Members"
Public Sub AfterReceiveReply(ByRef reply As System.ServiceModel.Channels.Message, ByVal correlationState As Object) Implements IClientMessageInspector.AfterReceiveReply
  Console.WriteLine("IClientMessageInspector.AfterReceiveReply called.")
  Console.WriteLine("Message: {0}", reply.ToString())
End Sub

Public Function BeforeSendRequest(ByRef request As System.ServiceModel.Channels.Message, ByVal channel As IClientChannel) As Object Implements IClientMessageInspector.BeforeSendRequest
  Console.WriteLine("IClientMessageInspector.BeforeSendRequest called.")
  Return Nothing
End Function
#Region "IEndpointBehavior Members"
Public Sub AddBindingParameters(ByVal endpoint As ServiceEndpoint, ByVal bindingParameters As BindingParameterCollection) Implements IEndpointBehavior.AddBindingParameters
    Return
End Sub

Public Sub ApplyClientBehavior(ByVal endpoint As ServiceEndpoint, ByVal clientRuntime As ClientRuntime) Implements IEndpointBehavior.ApplyClientBehavior
  clientRuntime.MessageInspectors.Add(New Inspector())
End Sub

Public Sub ApplyDispatchBehavior(ByVal endpoint As ServiceEndpoint, ByVal endpointDispatcher As EndpointDispatcher) Implements IEndpointBehavior.ApplyDispatchBehavior
  endpointDispatcher.DispatchRuntime.MessageInspectors.Add(New Inspector())
End Sub

Public Sub Validate(ByVal endpoint As ServiceEndpoint) Implements IEndpointBehavior.Validate
    Return
End Sub
  <client>
      <endpoint 
        address="https://localhost:8080/SampleService" 
        behaviorConfiguration="clientInspectorsAdded" 
        binding="wsHttpBinding"
        bindingConfiguration="WSHttpBinding_ISampleService" 
        contract="ISampleService"
        name="WSHttpBinding_ISampleService"
      >
      </endpoint>
  </client>
<behaviors>
  <endpointBehaviors>
    <behavior name="clientInspectorsAdded">
      <clientInterceptors />
    </behavior>
  </endpointBehaviors>
</behaviors>
<extensions>
  <behaviorExtensions>
    <add 
      name="clientInterceptors" 
      type="Microsoft.WCF.Documentation.InspectorInserter, HostApplication, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
  />
  </behaviorExtensions>
</extensions>

Voir aussi

Référence

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

Concepts

Configuration et extension de l'exécution à l'aide de comportements