IClientMessageInspector.BeforeSendRequest(Message, IClientChannel) Methode

Definition

Aktiviert die Überprüfung oder Änderung einer Nachricht, bevor eine Anforderungsnachricht an einen Dienst gesendet wird.Enables inspection or modification of a message before a request message is sent to a service.

public:
 System::Object ^ BeforeSendRequest(System::ServiceModel::Channels::Message ^ % request, System::ServiceModel::IClientChannel ^ channel);
public object BeforeSendRequest (ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel);
abstract member BeforeSendRequest : Message * System.ServiceModel.IClientChannel -> obj
Public Function BeforeSendRequest (ByRef request As Message, channel As IClientChannel) As Object

Parameter

request
Message

Die an den Dienst zu sendende Nachricht.The message to be sent to the service.

channel
IClientChannel

Der WCF-Clientobjektkanal.The WCF client object channel.

Gibt zurück

Das Objekt, das als correlationState-Argument der AfterReceiveReply(Message, Object)-Methode zurückgegeben wird.The object that is returned as the correlationState argument of the AfterReceiveReply(Message, Object) method. Dies ist null, wenn kein Korrelationszustand verwendet wird.This is null if no correlation state is used.

Es wird empfohlen, dies in eine Guid umzuwandeln, um sicherzustellen, dass es nicht zwei gleiche correlationState-Objekte gibt.The best practice is to make this a Guid to ensure that no two correlationState objects are the same.

Beispiele

Im folgenden Codebeispiel wird eine Implementierung veranschaulicht, die Zeichenfolgen in die Konsole ausgibt, wenn die Implementierung aufgerufen wird.The following code example shows an implementation that writes strings to the console when the implementation is called.

#region IClientMessageInspector Members
public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
  Console.WriteLine("IClientMessageInspector.AfterReceiveReply called.");
  Console.WriteLine("Message: {0}", reply.ToString());
}

public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, IClientChannel channel)
{
  Console.WriteLine("IClientMessageInspector.BeforeSendRequest called.");
  return null;
}
#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

Im folgenden Codebeispiel wird veranschaulicht, wie ein System.ServiceModel.Description.IEndpointBehavior verwendet wird, um den Clientnachrichteninspektor in den Clientendpunkt einzufügen.The following code example shows how to use an System.ServiceModel.Description.IEndpointBehavior to insert the client message inspector in the client endpoint.

#region IEndpointBehavior Members
public void AddBindingParameters(
  ServiceEndpoint endpoint, BindingParameterCollection bindingParameters
) { return; }

public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
  clientRuntime.MessageInspectors.Add(new Inspector());
  foreach (ClientOperation op in clientRuntime.Operations)
    op.ParameterInspectors.Add(new Inspector());
}

public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
  endpointDispatcher.DispatchRuntime.MessageInspectors.Add(new Inspector());
  foreach (DispatchOperation op in endpointDispatcher.DispatchRuntime.Operations)
    op.ParameterInspectors.Add(new Inspector());
}

public void Validate(ServiceEndpoint endpoint){ return; }
#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())
        For Each op As ClientOperation In clientRuntime.Operations
            op.ParameterInspectors.Add(New Inspector())
        Next op
    End Sub

    Public Sub ApplyDispatchBehavior(ByVal endpoint As ServiceEndpoint, ByVal endpointDispatcher As  _
                                     EndpointDispatcher) Implements IEndpointBehavior.ApplyDispatchBehavior
        endpointDispatcher.DispatchRuntime.MessageInspectors.Add(New Inspector())
        For Each op As DispatchOperation In endpointDispatcher.DispatchRuntime.Operations
            op.ParameterInspectors.Add(New Inspector())
        Next op
    End Sub

Public Sub Validate(ByVal endpoint As ServiceEndpoint) Implements IEndpointBehavior.Validate
    Return
End Sub

Schließlich zeigt das folgende Codebeispiel, wie die Clientkonfigurationsdatei geändert werden kann, um das Endpunktverhalten mit einem bestimmten Endpunkt zu verwenden.Finally, the following code example shows how to modify the client configuration file to use the endpoint behavior with a particular endpoint.

  <client>
      <endpoint 
        address="http://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>

Hinweise

Implementieren Sie den BeforeSendRequest, um eine Anforderungsnachricht zu überprüfen oder zu ändern, bevor sie gesendet wird.Implement the BeforeSendRequest to inspect or modify a request message before it is sent.

Gilt für: