Поделиться через


Как проверять или изменять сообщения на клиенте

Реализация интерфейса System.ServiceModel.Dispatcher.IClientMessageInspector и его вставка в среду выполнения клиента позволяет проверять или изменять входящие или исходящие сообщения клиента WCF. Дополнительные сведения см. в разделе Расширение клиентов. Эквивалентную функцию в службе выполняет интерфейс System.ServiceModel.Dispatcher.IDispatchMessageInspector.

Проверка или изменение сообщений

  1. Реализуйте интерфейс System.ServiceModel.Dispatcher.IClientMessageInspector.

  2. Реализуйте интерфейс System.ServiceModel.Description.IEndpointBehavior или System.ServiceModel.Description.IContractBehavior в зависимости от области, в которую нужно легко вставить инспектор сообщений клиентов.

  3. Вставьте поведение до вызова метода System.ServiceModel.ClientBase.Open или System.ServiceModel.ICommunicationObject.Open в фабрику каналов System.ServiceModel.ChannelFactory. Дополнительные сведения см. в разделе Настройка и расширение среды выполнения с помощью поведений.

Пример

В следующих примерах кода показаны, по порядку:

  • реализация инспектора клиента;

  • поведение конечной точки, вставляющее инспектор;

  • файл конфигурации, загружающий и запускающий поведение в приложении клиента.

#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>

См. также

Справочник

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

Основные понятия

Настройка и расширение среды выполнения с помощью поведений