IContractBehavior Schnittstelle
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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:
Eine Vertragsschnittstelle. In diesem Fall wird das Verhalten auf alle Verträge dieses Typs in einem beliebigen Endpunkt angewendet, und Windows Communication Foundation (WCF) ignoriert den Wert der IContractBehaviorAttribute.TargetContract Eigenschaft.
Eine Dienstklasse. In diesem Fall wird das Verhalten nur auf Endpunkte angewendet, deren Vertrag der Wert der IContractBehaviorAttribute.TargetContract-Eigenschaft ist.
Eine Rückrufklasse. In diesem Fall wird das Verhalten auf den Endpunkt des Duplexclients angewendet, und WCF ignoriert den Wert der IContractBehaviorAttribute.TargetContract Eigenschaft.
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:
Fügen Sie programmgesteuert das benutzerdefinierte Vertragsverhalten der Behaviors Eigenschaft vor dem Punkt hinzu, an dem der ChannelFactory<TChannel>.CreateChannel Aufruf erfolgt.
Erstellen Sie ein benutzerdefiniertes IContractBehaviorAttribut, das auch implementiert wird.
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. |