Freigeben über


IContractBehavior Schnittstelle

Definition

Implementiert Methoden, die zum Erweitern des Laufzeitverhaltens für einen Vertrag in einem Dienst oder einer Clientanwendung verwendet werden können.

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

Beispiele

Im folgenden Codebeispiel wird davon ausgegangen, dass eine benutzerdefinierte IInstanceProvider Implementierung aufgerufen wird ObjectProviderBehavior , die ein Singleton-Verhalten bereitstellt. Es gibt immer dieselbe Dienstinstanz zurück und wird nicht wiederverwendet.

Zum Einfügen der Instanzanbieteranpassung veranschaulicht das Beispiel, wie ein benutzerdefiniertes Attribut (SingletonBehaviorAttribute) implementiert wird, das zum Einfügen des benutzerdefinierten Dienstanbieters IContractBehavior implementiert wird. Es implementiert IContractBehaviorAttributeauch , was seine Nutzung an den ISampleService Vertrag bindet.

public class SingletonBehaviorAttribute : Attribute, IContractBehaviorAttribute, IContractBehavior
{

  #region IContractBehaviorAttribute Members

  public Type TargetContract
  {
    get { return typeof(ISampleService); }
  }

  #endregion

  #region IContractBehavior Members

  public void AddBindingParameters(ContractDescription description, ServiceEndpoint endpoint, System.ServiceModel.Channels.BindingParameterCollection parameters)
  {
    return;
  }

  public void ApplyClientBehavior(ContractDescription description, ServiceEndpoint endpoint, ClientRuntime clientRuntime)
  {
    return;
  }

  public void ApplyDispatchBehavior(ContractDescription description, ServiceEndpoint endpoint, DispatchRuntime dispatch)
  {
    dispatch.InstanceProvider = new ObjectProviderBehavior("Custom ObjectProviderBehavior constructor.");
  }

  public void Validate(ContractDescription description, ServiceEndpoint endpoint)
  {
    return;
  }

  #endregion
}
Public Class SingletonBehaviorAttribute
    Inherits Attribute
    Implements IContractBehaviorAttribute, IContractBehavior

  #Region "IContractBehaviorAttribute Members"

  Public ReadOnly Property TargetContract() As Type Implements IContractBehaviorAttribute.TargetContract
    Get
        Return GetType(ISampleService)
    End Get
  End Property

  #End Region

  #Region "IContractBehavior Members"

  Public Sub AddBindingParameters(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal parameters As System.ServiceModel.Channels.BindingParameterCollection) Implements IContractBehavior.AddBindingParameters
    Return
  End Sub

  Public Sub ApplyClientBehavior(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal clientRuntime As ClientRuntime) Implements IContractBehavior.ApplyClientBehavior
    Return
  End Sub

  Public Sub ApplyDispatchBehavior(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint, ByVal dispatch As DispatchRuntime) Implements IContractBehavior.ApplyDispatchBehavior
    dispatch.InstanceProvider = New ObjectProviderBehavior("Custom ObjectProviderBehavior constructor.")
  End Sub

  Public Sub Validate(ByVal description As ContractDescription, ByVal endpoint As ServiceEndpoint) Implements IContractBehavior.Validate
    Return
  End Sub

  #End Region
End Class

Hinweise

Implementieren Sie die IContractBehavior Schnittstelle zum Ändern, Untersuchen oder Erweitern eines Aspekts der vertragsweiten Ausführung auf Anwendungsebene. IEndpointBehavior Im Gegensatz zu IServiceBehavior Objekten IContractBehavior können Objekte nicht mithilfe einer Anwendungskonfigurationsdatei zur Laufzeit hinzugefügt werden. Sie können nur programmgesteuert oder mit einem Attribut hinzugefügt werden.

Weitere Informationen zum Auswählen zwischen Dienst-, Endpunkt- und Vertragsverhalten finden Sie unter Configuring and Extending the Runtime with Behaviors.

  • Verwenden Sie die AddBindingParameters Methode, um Bindungselemente mit benutzerdefinierten Daten bereitzustellen, um das Verhalten zu unterstützen.

  • Verwenden Sie die ApplyClientBehavior Methode, um Erweiterungen in einer Clientanwendung zu ändern, zu untersuchen oder einzufügen.

  • Verwenden Sie die ApplyDispatchBehavior Methode, um Erweiterungen in einer Dienstanwendung zu ändern, zu untersuchen oder einzufügen.

  • Verwenden Sie die Validate Methode, um sicherzustellen, dass ein Vertrag ein bestimmtes Feature unterstützen kann.

IContractBehavior Objekte können jede dieser Methoden verwenden, aber häufig ist nur eine wichtig; in solchen Fällen können die nicht verwendeten Methoden ohne Wert zurückgegeben werden.

Hinweis

IContractBehavior Alle Methoden übergeben System.ServiceModel.Description.ContractDescription und System.ServiceModel.Description.ServiceEndpoint als Parameter. Diese Parameter sind für die Untersuchung vorgesehen; wenn Sie die Objekte ändern, ist das Ausführungsverhalten nicht definiert.

IContractBehavior Typen können entweder für den Dienst oder den Client oder beides verwendet werden. Um eine Anpassungsaufgabe für den Dienst auszuführen, muss das IContractBehavior Objekt vor dem Erstellen der Dienstlaufzeit der Behaviors Eigenschaft hinzugefügt werden, was auftritt, wenn die ICommunicationObject.Open Methode für das System.ServiceModel.ServiceHost Objekt aufgerufen wird. Es gibt zwei Möglichkeiten, dies zu tun.

Die erste Methode besteht darin, der Eigenschaft programmgesteuert das benutzerdefinierte Vertragsverhalten Behaviors vor dem Punkt hinzuzufügen, an dem die ICommunicationObject.Open Methode für das System.ServiceModel.ServiceHost Objekt aufgerufen wird. Wenn das Verhalten auf diese Weise angewendet wird, wird das Verhalten für alle Nachrichten angewendet, die über diesen Vertrag auf einem beliebigen Endpunkt fließen.

Hinweis

Das Verhalten wird auf alle Verträge desselben Typs angewendet. Wenn Sie beispielsweise programmgesteuert denselben Vertragstyp zu mehreren Endpunkten hinzufügen, ändert das Verhalten alle Endpunkte, die auf dasselbe Vertragsobjekt verweisen.

Die zweite Methode besteht darin, ein benutzerdefiniertes IContractBehavior Attribut zu erstellen, das folgendes implementiert und angewendet wird:

  • Eine Vertragsschnittstelle. In diesem Fall wird das Verhalten auf alle Verträge dieses Typs in jedem Endpunkt angewendet.

  • Eine Dienstklasse. In diesem Fall wird das Verhalten unabhängig vom Vertrag auf alle Endpunkte angewendet.

  • Eine Rückrufklasse. In diesem Fall wird das Verhalten auf den Endpunkt des Duplexclients angewendet.

Das Verhalten des zweiten Ansatzes variiert geringfügig, wenn das benutzerdefinierte Attribut ebenfalls implementiert System.ServiceModel.Description.IContractBehaviorAttributewird. In diesem Fall lautet das Verhalten wie folgt:

Um die Anpassungsaufgabe auf dem Client auszuführen, für den sie vorgesehen ist, muss das IContractBehavior Objekt der Eigenschaft vor dem Erstellen der Clientlaufzeit hinzugefügt Behaviors werden, die beim ChannelFactory<TChannel>.CreateChannel Aufrufen auftritt. Sie können auf zwei Arten vorgehen:

Weitere Informationen zum programmgesteuerten Hinzufügen IContractBehavior von Typen zur Client- oder Dienstanwendung finden Sie unter Configuring and Extending the Runtime with Behaviors.

Methoden

Name Beschreibung
AddBindingParameters(ContractDescription, ServiceEndpoint, BindingParameterCollection)

Konfiguriert alle Bindungselemente, um das Vertragsverhalten zu unterstützen.

ApplyClientBehavior(ContractDescription, ServiceEndpoint, ClientRuntime)

Implementiert eine Änderung oder Erweiterung des Clients über einen Vertrag hinweg.

ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime)

Implementiert eine Änderung oder Erweiterung des Clients über einen Vertrag hinweg.

Validate(ContractDescription, ServiceEndpoint)

Implementieren Sie die Implementierung, um zu bestätigen, dass der Vertrag und der Endpunkt das Vertragsverhalten unterstützen können.

Gilt für: