IContractBehavior Interface

Définition

Implémente des méthodes qui permettent d'étendre un comportement d'exécution pour un contrat, que ce soit pour une application cliente ou de service.

public interface class IContractBehavior
public interface IContractBehavior
type IContractBehavior = interface
Public Interface IContractBehavior
Dérivé

Exemples

L'exemple de code suivant suppose une implémentation IInstanceProvider personnalisée appelée ObjectProviderBehavior, qui fournit un comportement singleton ; elle retourne toujours la même instance de service et ne la recycle pas.

Pour personnaliser le fournisseur d'instances, l'exemple illustre l'implémentation d'un attribut personnalisé (SingletonBehaviorAttribute) qui implémente IContractBehavior pour insérer le fournisseur d'instances de services personnalisé. Il implémente également IContractBehaviorAttribute, qui lie son utilisation au contrat ISampleService.

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

Remarques

Implémentez l'interface IContractBehavior pour modifier, examiner ou étendre certains aspects de l'exécution à l'échelle du contrat au niveau de l'application. À la différence des objets IServiceBehavior et IEndpointBehavior, les objets IContractBehavior ne peuvent pas être ajoutés à l'exécution à l'aide d'un fichier de configuration de l'application ; ils ne peuvent l'être que par programme ou à l'aide d'un attribut.

Pour plus d’informations sur le choix entre les comportements de service, de point de terminaison et de contrat, consultez Configuration et extension du runtime avec des comportements.

  • Utilisez la méthode AddBindingParameters pour fournir aux éléments de liaison des données personnalisées pour prendre en charge le comportement.

  • Utilisez la méthode ApplyClientBehavior pour modifier, examiner ou insérer des extensions dans le contrat d’une application cliente.

  • Utilisez la méthode ApplyDispatchBehavior pour modifier, examiner ou insérer des extensions dans le contrat d'une application de service.

  • Utilisez la méthode Validate pour assurer qu'un contrat peut prendre en charge une fonctionnalité particulière.

Les objets IContractBehavior peuvent utiliser chacune de ces méthodes mais souvent, seule l'une d'elles est importante. Dans ce cas, les méthodes inutilisées peuvent ne retourner aucune valeur.

Notes

Toutes les méthodes IContractBehavior passent System.ServiceModel.Description.ContractDescription et System.ServiceModel.Description.ServiceEndpoint comme paramètres. Ces paramètres sont présentés à titre d'examen. Si vous modifiez les objets, le comportement d'exécution n'est pas défini.

IContractBehavior les types peuvent être utilisés sur le service ou le client, ou les deux. Pour effectuer une tâche de personnalisation sur le service, l’objet IContractBehavior doit être ajouté à la propriété Behaviors avant la construction de l’exécution de service, qui se produit lors de l’appel à la méthode ICommunicationObject.Open sur l’objet System.ServiceModel.ServiceHost. Il existe deux façons d'effectuer cette opération.

La première méthode consiste à ajouter par programme le comportement de contrat personnalisé à la propriété Behaviors avant l'appel à la méthode ICommunicationObject.Open sur l'objet System.ServiceModel.ServiceHost. Lors d'une application de ce type, le comportement est appliqué pour tous les messages échangés sur ce contrat sur tous les points de terminaison.

Notes

Le comportement est appliqué à tous les contrats du même type. Par exemple, si vous ajoutez par programme le même type de contrat à plusieurs points de terminaison, le comportement modifie tous les points de terminaison qui font référence au même objet de contrat.

La deuxième méthode consiste à créer un attribut personnalisé qui implémente IContractBehavior et l'applique aux éléments suivants :

  • Interface de contrat. Dans ce cas, le comportement est appliqué à tous les contrats de ce type de tous les points de terminaison.

  • Classe de service. Dans ce cas, le comportement est appliqué à tous les points de terminaison indépendamment du contrat.

  • Classe de rappel. Dans ce cas, le comportement est appliqué au point de terminaison du client duplex.

Le comportement de la deuxième approche varie légèrement si l'attribut personnalisé implémente également System.ServiceModel.Description.IContractBehaviorAttribute. Dans ce cas, le comportement est le suivant :

  • Interface de contrat. Dans ce cas, le comportement est appliqué à tous les contrats de ce type dans n’importe quel point de terminaison et Windows Communication Foundation (WCF) ignore la valeur de la IContractBehaviorAttribute.TargetContract propriété.

  • Classe de service. Dans ce cas, le comportement n'est appliqué qu'aux points de terminaison dont le contrat est la valeur de la propriété IContractBehaviorAttribute.TargetContract.

  • Classe de rappel. Dans ce cas, le comportement est appliqué au point de terminaison du client duplex et WCF ignore la valeur de la IContractBehaviorAttribute.TargetContract propriété.

Pour effectuer la tâche de personnalisation sur le client auquel il est destiné, l’objet IContractBehavior doit être ajouté à la propriété Behaviors avant la construction de l’exécution du client, qui se produit lors de l’appel à ChannelFactory<TChannel>.CreateChannel. Il existe deux façons d'effectuer cette opération :

Pour plus d’informations sur l’ajout IContractBehavior par programmation de types à l’application cliente ou de service, consultez Configuration et extension du runtime avec des comportements.

Méthodes

AddBindingParameters(ContractDescription, ServiceEndpoint, BindingParameterCollection)

Configure tous les éléments de liaison pour prendre en charge le comportement de contrat.

ApplyClientBehavior(ContractDescription, ServiceEndpoint, ClientRuntime)

Implémente une modification ou une extension du client sur l’intégralité d’un contrat.

ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime)

Implémente une modification ou une extension du client sur l’intégralité d’un contrat.

Validate(ContractDescription, ServiceEndpoint)

Effectuez une implémentation pour confirmer que le contrat et le point de terminaison peuvent prendre en charge le contrat ou le comportement.

S’applique à