IOperationBehavior Schnittstelle

Definition

Implementiert Methoden, die verwendet werden können, um das Laufzeitverhalten eines Vorgangs in einer Dienst- oder Clientanwendung zu erweitern.

public interface class IOperationBehavior
public interface IOperationBehavior
type IOperationBehavior = interface
Public Interface IOperationBehavior
Abgeleitet

Beispiele

Im folgenden Codebeispiel wird eine Implementierung von System.ServiceModel.Dispatcher.IParameterInspector veranschaulicht, mit der in die Konsole geschrieben werden kann, wenn der Inspektor bei einem Vorgang aufgerufen wird. Diese Anpassung kann nur an den System.ServiceModel.Dispatcher.DispatchOperation oder System.ServiceModel.Dispatcher.ClientOperation angefügt werden und wird daher in der Regel durch ein Vorgangsverhalten eingefügt.

#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

Das folgende Codebeispiel zeigt, wie der Parameterinspektor durch das Vorgangsverhalten an die Laufzeit angefügt wird.

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

Hinweise

Implementiert die IOperationBehavior-Schnittstelle, um Aspekte der vorgangsweiten Ausführung auf Anwendungsebene für Client- oder Dienstanwendungen zu ändern, zu überprüfen oder zu erweitern.

  • Verwenden Sie die AddBindingParameters-Methode, um benutzerdefinierte Daten zur Laufzeit zu übergeben, die bewirken, dass Bindungen benutzerdefiniertes Verhalten unterstützen.

  • Verwenden Sie die ApplyClientBehavior-Methode, um in einer Clientanwendung Erweiterungen in einem Clientverteiler zu ändern, zu überprüfen oder hinzuzufügen.

  • Verwenden Sie die ApplyDispatchBehavior-Methode, um in einer Dienstanwendung Erweiterungen einer vorgangsweiten Ausführung zu ändern oder zu überprüfen oder hinzuzufügen.

  • Verwenden Sie die Validate-Methode, um zu prüfen, ob OperationDescription bestimmte Anforderungen erfüllt. Dies kann zur Prüfung verwendet werden, ob für einen Vorgang eine bestimmte Konfigurationseinstellung aktiviert wurde und ob er bestimmte Funktionen und andere Anforderungen unterstützt.

IOperationBehavior -Objekte können eine dieser Methoden verwenden, aber oft ist nur eine wichtige Methode; in solchen Fällen können die nicht verwendeten Methoden zurückgeben und keine Aktion ausführen.

Hinweis

Alle IOperationBehavior-Methoden übergeben ein OperationDescription-Objekt als Parameter. Dieser Parameter dient nur für die Prüfung; wenn Sie das OperationDescription-Objekt ändern, ist das Ausführungsverhalten nicht definiert.

IOperationBehavior-Objekte werden in der Regel verwendet, um auf die verschiedenen Eigenschaften der System.ServiceModel.Dispatcher.DispatchOperation-Objekte in einer Dienstanwendung und System.ServiceModel.Dispatcher.ClientOperation-Objekte in einer Clientanwendung zuzugreifen.

In der Regel prüft der Entwickler zunächst die Erweiterungspunkte, um zu ermitteln, welche Anpassungsoption am besten für das Anwendungsszenario geeignet ist, und implementiert dann die Anpassung im entsprechenden Bereich. System.ServiceModel.Description.IServiceBehavior-Objekte können beispielsweise Anpassungen für alle Nachrichten in einem Dienst einfügen, und System.ServiceModel.Description.IContractBehavior-Objekte können Anpassungen für alle Nachrichten in einem bestimmen Vertrag einfügen und so weiter. Eine Beschreibung der verschiedenen verfügbaren Eigenschaften und Anpassungen finden Sie unter Erweitern von ServiceHost und der Dienstmodellebene.

Nachdem eine Anpassung festgelegt wurde (und die Anpassungsschnittstelle bei Bedarf implementiert wurde) und der IOperationBehavior geeignete Anpassungsbereich ist, muss die Anpassung in die Windows Communication Foundation -Runtime (WCF) eingefügt werden, indem das Vorgangsverhalten implementiert IOperationBehavior und der Runtime hinzugefügt wird.

Es gibt zwei Möglichkeiten, IOperationBehavior der Laufzeit hinzuzufügen:

  • Fügen Sie das benutzerdefinierte Vorgangsverhalten den OperationDescription.Behaviors-Eigenschaften vor dem Öffnen des Diensthosts (in einer Dienstanwendung) bzw. der Kanalfactory (in einer Clientanwendung) hinzu.

  • Fügen Sie das Verhalten mit einem benutzerdefinierten Attribut hinzu.

Um eine Dienstanpassungsaufgabe auszuführen, muss das entsprechende IOperationBehavior-Objekt der OperationDescription.Behaviors-Eigenschaft vor der Erstellung der Dienstlaufzeit hinzugefügt werden, was erfolgt, wenn die ICommunicationObject.Open-Methode für System.ServiceModel.ServiceHost aufgerufen wird. Um eine Clientanpassungsaufgabe auszuführen, muss das IOperationBehavior-Objekt der OperationDescription.Behaviors-Eigenschaft hinzugefügt werden, bevor die ChannelFactory<TChannel>.CreateChannel-Methode bzw. die ICommunicationObject.Open-Methode für ChannelFactory<TChannel> aufgerufen wird.

Obwohl das Vorgangsverhalten so konzipiert ist, dass im Rahmen eines einzelnes Vorgangs einfach auf die Laufzeit zugegriffen werden kann, haben Sie durch Zugriff auf das übergeordnete Laufzeitobjekt auch die Möglichkeit, in einem größeren Rahmen auf die Laufzeit zugreifen.

Methoden

AddBindingParameters(OperationDescription, BindingParameterCollection)

Wird implementiert, um Daten zur Laufzeit an Bindungen zu übergeben und damit benutzerdefiniertes Verhalten zu unterstützen.

ApplyClientBehavior(OperationDescription, ClientOperation)

Implementiert eine Änderung oder Erweiterung des Clients für einen Vorgang.

ApplyDispatchBehavior(OperationDescription, DispatchOperation)

Implementiert eine Änderung oder Erweiterung des Diensts für einen Vorgang.

Validate(OperationDescription)

Implementieren Sie dies, um zu prüfen, ob der Vorgang bestimmte Kriterien erfüllt.

Gilt für: