Vorgehensweise: Überprüfen oder Ändern von Parametern
Sie können die eingehenden oder ausgehenden Nachrichten für einen einzelnen Vorgang zu einem Windows Communication Foundation (WCF)-Clientobjekt oder einem WCF-Dienst überprüfen oder ändern, indem Sie die System.ServiceModel.Dispatcher.IParameterInspector-Schnittstelle implementieren und in die Client- oder Dienstlaufzeit einfügen. In der Regel wird ein Vorgangsverhalten verwendet, um Parameterinspektoren für einen einzelnen Vorgang hinzufügen; weitere Verhalten können für einen einfachen Zugriff auf die Laufzeit in größerem Umfang verwendet werden. Weitere Informationen finden Sie unter Erweitern von Clients und Erweitern von Verteilern.
Überprüfen oder Ändern von Parametern
Implementieren Sie die System.ServiceModel.Dispatcher.IParameterInspector-Schnittstelle.
Implementieren Sie System.ServiceModel.Description.IOperationBehavior, System.ServiceModel.Description.IEndpointBehavior, System.ServiceModel.Description.IServiceBehavior oder System.ServiceModel.Description.IContractBehavior (je nach erforderlichem Bereich), um den Eigenschaften System.ServiceModel.Dispatcher.ClientOperation.ParameterInspectors oder System.ServiceModel.Dispatcher.DispatchOperation.ParameterInspectors den Parameterinspektor hinzuzufügen.
Fügen Sie das Verhalten vor dem Aufrufen der System.ServiceModel.ClientBase.Open- oder System.ServiceModel.ICommunicationObject.Open-Methode für System.ServiceModel.ChannelFactory ein. Weitere Informationen finden Sie unter Konfigurieren und Erweitern der Laufzeit mit Verhalten.
Beispiel
Die unten aufgeführten Codebeispiele zeigen der Reihe nach Folgendes:
Eine Parameterinspektorimplementierung
Die Verhaltensimplementierung, die den Parameterinspektor mit System.ServiceModel.Description.IOperationBehavior, System.ServiceModel.Description.IEndpointBehavior und System.ServiceModel.Description.IServiceBehavior einfügt.
Eine Konfigurationsdatei, die das Endpunktverhalten in eine Clientanwendung lädt und ausführt, um den Parameterinspektor für den Client einzufügen.
#Region "IParameterInspector Members"
Public Sub AfterCall(ByVal operationName As String, ByVal outputs() As Object, ByVal returnValue As Object, _
ByVal correlationState As Object) Implements IParameterInspector.AfterCall
Console.WriteLine("IParameterInspector.AfterCall called for {0} with return value {1}.", _
operationName, returnValue.ToString())
End Sub
Public Function BeforeCall(ByVal operationName As String, ByVal inputs() As Object) As Object Implements _
IParameterInspector.BeforeCall
Console.WriteLine("IParameterInspector.BeforeCall called for {0}.", operationName)
Return Nothing
End Function
Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports System.ServiceModel.Configuration
Imports System.ServiceModel.Description
Imports System.ServiceModel.Dispatcher
Imports System.Text
Namespace Microsoft.WCF.Documentation
Public Class InspectorInserter
Inherits BehaviorExtensionElement
Implements IServiceBehavior, IEndpointBehavior, IOperationBehavior
#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
Public Sub Validate(ByVal serviceDescription As ServiceDescription, ByVal serviceHostBase As ServiceHostBase) _
Implements IServiceBehavior.Validate
Return
End Sub
#End Region
#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
#End Region
#Region "IOperationBehavior Members"
Public Sub AddBindingParameters(ByVal operationDescription As OperationDescription, _
ByVal bindingParameters As BindingParameterCollection) Implements _
IOperationBehavior.AddBindingParameters
Return
End Sub
Public Sub ApplyClientBehavior(ByVal operationDescription As OperationDescription, ByVal _
clientOperation As ClientOperation) Implements IOperationBehavior.ApplyClientBehavior
clientOperation.ParameterInspectors.Add(New Inspector())
End Sub
Public Sub ApplyDispatchBehavior(ByVal operationDescription As OperationDescription, ByVal dispatchOperation As _
DispatchOperation) Implements IOperationBehavior.ApplyDispatchBehavior
dispatchOperation.ParameterInspectors.Add(New Inspector())
End Sub
Public Sub Validate(ByVal operationDescription As OperationDescription) Implements IOperationBehavior.Validate
Return
End Sub
#End Region
Public Overrides ReadOnly Property BehaviorType() As Type
Get
Return GetType(InspectorInserter)
End Get
End Property
Protected Overrides Function CreateBehavior() As Object
Return New InspectorInserter()
End Function
End Class
End Namespace
<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>