IParameterInspector 介面

定義

定義可透過自訂參數偵測器實作的合約,您可以在用戶端或服務上進行呼叫前後,使用這個參數偵測器來檢查或修改資訊。

public interface class IParameterInspector
public interface IParameterInspector
type IParameterInspector = interface
Public Interface IParameterInspector

範例

下列程式碼範例會示範 IParameterInspector 實作:

  • 當服務已經將回應還原序列化或是用戶端已經將要求序列化之後,將作業名稱和傳回值寫入至主控台。

  • 在用戶端上還原序列化回應之後,或在服務上序列化回應之後,將作業名稱寫入至主控台。

#region IParameterInspector Members
public void AfterCall(string operationName, object[] outputs, object returnValue, object correlationState)
{
  Console.WriteLine(
    "IParameterInspector.AfterCall called for {0} with return value {1}.",
    operationName,
    returnValue.ToString()
  );
}

public object BeforeCall(string operationName, object[] inputs)
{
  Console.WriteLine("IParameterInspector.BeforeCall called for {0}.", operationName);
  return null;
}
#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

下列程式碼範例會示範如何使用 System.ServiceModel.Description.IOperationBehaviorSystem.ServiceModel.Description.IEndpointBehaviorSystem.ServiceModel.Description.IServiceBehavior 來插入 IParameterInspector 物件。

using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Configuration;
using System.ServiceModel.Description;
using System.ServiceModel.Dispatcher;
using System.Text;

namespace Microsoft.WCF.Documentation
{
  public class InspectorInserter : BehaviorExtensionElement, IServiceBehavior, IEndpointBehavior, IOperationBehavior
  {
    #region IServiceBehavior Members
    public void AddBindingParameters(
      ServiceDescription serviceDescription,
      ServiceHostBase serviceHostBase,
      System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints,
      BindingParameterCollection bindingParameters
    )
    { return; }

    public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
    {
      foreach (ChannelDispatcher chDisp in serviceHostBase.ChannelDispatchers)
      {
        foreach (EndpointDispatcher epDisp in chDisp.Endpoints)
        {
          epDisp.DispatchRuntime.MessageInspectors.Add(new Inspector());
          foreach (DispatchOperation op in epDisp.DispatchRuntime.Operations)
            op.ParameterInspectors.Add(new Inspector());
        }
      }
    }

    public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase){ return; }

    #endregion
    #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; }
    #endregion
    #region IOperationBehavior Members
    public void AddBindingParameters(
      OperationDescription operationDescription, BindingParameterCollection bindingParameters
    )
    { return; }

    public void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation)
    {
      clientOperation.ParameterInspectors.Add(new Inspector());
    }

    public void ApplyDispatchBehavior(OperationDescription operationDescription, DispatchOperation dispatchOperation)
    {
      dispatchOperation.ParameterInspectors.Add(new Inspector());
    }

    public void Validate(OperationDescription operationDescription){ return; }

    #endregion

    public override Type BehaviorType
    {
      get { return typeof(InspectorInserter); }
    }

    protected override object CreateBehavior()
    { return new InspectorInserter(); }
  }
}
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

備註

實作 IParameterInspector 介面,即可建立自訂參數偵測器,以便在用戶端或服務應用程式中進行呼叫前後檢視和修改呼叫的內容。

從用戶端進行傳出呼叫時會先叫用偵測器,然後序列化要求內容,並將結果傳送給服務。 在完成還原序列化回應之後,但在傳回值分派給 Proxy 方法之前,也會呼叫這個偵測器。

對服務進行傳入呼叫時,會在完成還原序列化參數之後,但在結果分派至服務作業之前叫用偵測器。

使用 ClientOperation.ParameterInspectorsDispatchOperation.ParameterInspectors 屬性,即可將 IParameterInspector 實作加入至特定作業的偵測器集合。

注意 開發人員和系統管理員必須確保瞭解與其他 IParameterInspector 實作的互動。

方法

AfterCall(String, Object[], Object, Object)

當用戶端呼叫已傳回後,且在服務回應傳送之前進行呼叫。

BeforeCall(String, Object[])

在用戶端呼叫傳送前,且在服務回應傳回之後進行呼叫。

適用於