Partager via


IContractBehavior Interface

Définition

Implémente des méthodes qui peuvent être utilisées pour étendre le comportement d’exécution d’un contrat dans un service ou une application cliente.

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 personnalisée IInstanceProvider appelée ObjectProviderBehavior qui fournit un comportement « singleton » ; elle retourne toujours la même instance de service et ne la recycle pas.

Pour insérer la personnalisation du fournisseur d’instances, l’exemple montre comment implémenter un attribut personnalisé (SingletonBehaviorAttribute) qui implémente IContractBehavior pour insérer le fournisseur d’instance de service personnalisé. Il implémente IContractBehaviorAttributeégalement , qui lie son utilisation au ISampleService contrat.

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 un aspect de l’exécution à l’échelle du contrat au niveau de l’application. Contrairement IServiceBehavior aux objets, IContractBehaviorIEndpointBehavior les objets ne peuvent pas être ajoutés au runtime à l’aide d’un fichier de configuration d’application ; ils peuvent uniquement être ajoutés 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 AddBindingParameters méthode pour fournir des éléments de liaison avec des données personnalisées pour prendre en charge le comportement.

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

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

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

IContractBehavior les objets peuvent utiliser l’une de ces méthodes, mais souvent un seul est important ; dans ce cas, les méthodes inutilisées peuvent retourner sans valeur.

Note

Toutes les IContractBehavior méthodes passent System.ServiceModel.Description.ContractDescription et System.ServiceModel.Description.ServiceEndpoint en tant que paramètres. Ces paramètres sont à des fins d’examen ; si vous modifiez les objets que 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 Behaviors propriété avant la construction du runtime de service, qui se produit lorsque la ICommunicationObject.Open méthode est appelée sur l’objet System.ServiceModel.ServiceHost . Deux méthodes s’offrent à vous pour ce faire.

La première méthode consiste à ajouter par programmation le comportement de contrat personnalisé à la Behaviors propriété avant le point où la ICommunicationObject.Open méthode est appelée sur l’objet System.ServiceModel.ServiceHost . Lorsqu’il est appliqué de cette façon, le comportement est appliqué pour tous les messages qui transitent par ce contrat sur n’importe quel point de terminaison.

Note

Le comportement est appliqué à tous les contrats du même type. Par exemple, si vous ajoutez par programmation 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 à :

  • Interface de contrat. Dans ce cas, le comportement est appliqué à tous les contrats de ce type dans n’importe quel point de terminaison.

  • Classe de service. Dans ce cas, le comportement est appliqué à tous les points de terminaison, quel que soit le 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 System.ServiceModel.Description.IContractBehaviorAttributeégalement . 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 pour lequel il est destiné, l’objet IContractBehavior doit être ajouté à la Behaviors propriété avant la construction du runtime du client, qui se produit lorsqu’il ChannelFactory<TChannel>.CreateChannel est appelé. Il existe deux méthodes pour y parvenir :

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

Méthodes

Nom Description
AddBindingParameters(ContractDescription, ServiceEndpoint, BindingParameterCollection)

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

ApplyClientBehavior(ContractDescription, ServiceEndpoint, ClientRuntime)

Implémente une modification ou une extension du client sur un contrat.

ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime)

Implémente une modification ou une extension du client sur un contrat.

Validate(ContractDescription, ServiceEndpoint)

Implémentez pour confirmer que le contrat et le point de terminaison peuvent prendre en charge le comportement du contrat.

S’applique à