Vorgehensweise: Überprüfen und Ändern von Nachrichten auf dem Dienst
Sie können die eingehenden oder ausgehenden Nachrichten für einen Windows Communication Foundation (WCF)-Client überprüfen oder ändern, indem Sie einen System.ServiceModel.Dispatcher.IDispatchMessageInspector implementieren und in die Dienstlaufzeit einfügen. Weitere Informationen finden Sie unter Erweitern von Verteilern. Die entsprechende Funktion für den Dienst ist der System.ServiceModel.Dispatcher.IClientMessageInspector.
So überprüfen oder ändern Sie Nachrichten
Implementieren Sie die System.ServiceModel.Dispatcher.IDispatchMessageInspector-Schnittstelle.
Implementieren Sie eine System.ServiceModel.Description.IServiceBehavior-, System.ServiceModel.Description.IEndpointBehavior- oder System.ServiceModel.Description.IContractBehavior-Schnittstelle, je nach dem Umfang, in dem Sie Ihren Dienstnachrichteninspektor auf einfache Weise einfügen möchten.
Fügen Sie Ihr Verhalten ein, bevor Sie die System.ServiceModel.ICommunicationObject.Open-Methode auf dem System.ServiceModel.ServiceHost aufrufen. Weitere Informationen finden Sie unter Konfigurieren und Erweitern der Laufzeit mit Verhalten.
Beispiel
Die unten aufgeführten Codebeispiele zeigen der Reihe nach Folgendes:
Eine Dienstinspektorimplementierung.
Ein Dienstverhalten, das den Inspektor einfügt.
Eine Konfigurationsdatei, die das Verhalten lädt und in einer Dienstanwendung ausführt.
#Region "IDispatchMessageInspector Members"
Public Function AfterReceiveRequest(ByRef request As System.ServiceModel.Channels.Message, _
ByVal channel As IClientChannel, ByVal instanceContext As InstanceContext) _
As Object Implements IDispatchMessageInspector.AfterReceiveRequest
Console.WriteLine("IDispatchMessageInspector.AfterReceiveRequest called.")
Return Nothing
End Function
Public Sub BeforeSendReply(ByRef reply As System.ServiceModel.Channels.Message, ByVal correlationState As Object) _
Implements IDispatchMessageInspector.BeforeSendReply
Console.WriteLine("IDispatchMessageInspector.BeforeSendReply called.")
End Sub
#End Region
#Region "IServiceBehavior Members"
Public Sub AddBindingParameters(ByVal serviceDescription As ServiceDescription, _
ByVal serviceHostBase As ServiceHostBase, ByVal endpoints As _
System.Collections.ObjectModel.Collection(Of ServiceEndpoint), _
ByVal bindingParameters As BindingParameterCollection) Implements IServiceBehavior.AddBindingParameters
Return
End Sub
Public Sub ApplyDispatchBehavior(ByVal serviceDescription As ServiceDescription, _
ByVal serviceHostBase As ServiceHostBase) Implements _
IServiceBehavior.ApplyDispatchBehavior
For Each chDisp As ChannelDispatcher In serviceHostBase.ChannelDispatchers
For Each epDisp As EndpointDispatcher In chDisp.Endpoints
epDisp.DispatchRuntime.MessageInspectors.Add(New Inspector())
For Each op As DispatchOperation In epDisp.DispatchRuntime.Operations
op.ParameterInspectors.Add(New Inspector())
Next op
Next epDisp
Next chDisp
End Sub
<configuration>
<system.serviceModel>
<services>
<service
name="Microsoft.WCF.Documentation.SampleService"
behaviorConfiguration="inspectorBehavior">
<host>
<baseAddresses>
<add baseAddress="https://localhost:8080/SampleService" />
</baseAddresses>
</host>
<endpoint
address=""
binding="wsHttpBinding"
contract="Microsoft.WCF.Documentation.ISampleService"
/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="inspectorBehavior">
<serviceInspectors />
</behavior>
</serviceBehaviors>
</behaviors>
<extensions>
<behaviorExtensions>
<add
name="serviceInspectors"
type="Microsoft.WCF.Documentation.InspectorInserter, HostApplication, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
/>
</behaviorExtensions>
</extensions>
</system.serviceModel>
</configuration>
Siehe auch
Verweis
System.ServiceModel.Dispatcher.IClientMessageInspector
System.ServiceModel.Dispatcher.IDispatchMessageInspector