IContractBehavior Interface

Definitie

Hiermee worden methoden geïmplementeerd die kunnen worden gebruikt om runtimegedrag voor een contract in een service- of clienttoepassing uit te breiden.

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

Voorbeelden

In het volgende codevoorbeeld wordt ervan uitgegaan dat een aangepaste IInstanceProvider implementatie ObjectProviderBehavior die een singleton-gedrag biedt. Het retourneert altijd hetzelfde service-exemplaar en recyclet deze niet.

Als u de aanpassing van de instantieprovider wilt invoegen, ziet u in het voorbeeld hoe u een aangepast kenmerk (SingletonBehaviorAttribute) implementeert om IContractBehavior de provider van het aangepaste service-exemplaar in te voegen. Het implementeert IContractBehaviorAttributeook , waarmee het gebruik ervan aan het ISampleService contract wordt gebonden.

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

Opmerkingen

Implementeer de IContractBehavior interface om een bepaald aspect van de uitvoering van contracten op toepassingsniveau te wijzigen, te onderzoeken of uit te breiden. In tegenstelling tot IServiceBehavior objecten IContractBehavior kunnen IEndpointBehavior objecten niet aan de runtime worden toegevoegd met behulp van een toepassingsconfiguratiebestand. Ze kunnen alleen programmatisch of met behulp van een kenmerk worden toegevoegd.

Zie Het configureren en uitbreiden van de runtime met gedrag voor services, eindpunten en contracten voor meer informatie over het kiezen tussen service-, eindpunt- en contractgedrag.

  • Gebruik de AddBindingParameters methode om bindingselementen met aangepaste gegevens te bieden ter ondersteuning van het gedrag.

  • Gebruik de ApplyClientBehavior methode om extensies voor een contract in een clienttoepassing te wijzigen, te onderzoeken of in te voegen.

  • Gebruik de ApplyDispatchBehavior methode om extensies voor een contract in een servicetoepassing te wijzigen, te onderzoeken of in te voegen.

  • Gebruik de Validate methode om ervoor te zorgen dat een contract een bepaalde functie kan ondersteunen.

IContractBehavior objecten kunnen gebruikmaken van een van deze methoden, maar vaak is slechts één belangrijk; in dergelijke gevallen kunnen de ongebruikte methoden zonder waarde worden geretourneerd.

Note

IContractBehavior Alle methoden worden doorgegeven System.ServiceModel.Description.ContractDescription en System.ServiceModel.Description.ServiceEndpoint als parameters. Deze parameters zijn voor onderzoek; als u de objecten wijzigt, is het uitvoeringsgedrag niet gedefinieerd.

IContractBehavior typen kunnen worden gebruikt voor de service of de client, of beide. Als u een aanpassingstaak voor de service wilt uitvoeren, moet het IContractBehavior object worden toegevoegd aan de Behaviors eigenschap vóór de bouw van de serviceruntime, die optreedt wanneer de ICommunicationObject.Open methode wordt aangeroepen op het System.ServiceModel.ServiceHost object. Er zijn twee manieren om dit te doen.

De eerste methode is het programmatisch toevoegen van het aangepaste contractgedrag aan de Behaviors eigenschap vóór het punt waarop de ICommunicationObject.Open methode wordt aangeroepen op het System.ServiceModel.ServiceHost object. Wanneer dit op deze manier wordt toegepast, wordt het gedrag toegepast voor alle berichten die via dat contract stromen op elk eindpunt.

Note

Het gedrag wordt toegepast op alle contracten van hetzelfde type. Als u bijvoorbeeld programmatisch hetzelfde contracttype toevoegt aan meer dan één eindpunt, wijzigt het gedrag alle eindpunten die verwijzen naar hetzelfde contractobject.

De tweede methode is het maken van een aangepast kenmerk dat dat implementeert IContractBehavior en toepast op:

  • Een contractinterface. In dit geval wordt het gedrag toegepast op alle contracten van dat type in elk eindpunt.

  • Een serviceklasse. In dit geval wordt het gedrag toegepast op alle eindpunten, ongeacht het contract.

  • Een callback-klasse. In dit geval wordt het gedrag toegepast op het eindpunt van de duplex-client.

Het gedrag van de tweede benadering varieert enigszins als het aangepaste kenmerk ook wordt geïmplementeerd System.ServiceModel.Description.IContractBehaviorAttribute. In dit geval is het gedrag als volgt:

Als u de aanpassingstaak wilt uitvoeren op de client waarvoor het is bedoeld, moet het IContractBehavior object worden toegevoegd aan de Behaviors eigenschap vóór de bouw van de clientruntime, die optreedt wanneer ChannelFactory<TChannel>.CreateChannel deze wordt aangeroepen. Er zijn twee manieren om dit te doen:

Zie De runtime configureren en uitbreiden met gedrag voor meer informatie over het programmatisch toevoegen IContractBehavior van typen aan de client- of servicetoepassing.

Methoden

Name Description
AddBindingParameters(ContractDescription, ServiceEndpoint, BindingParameterCollection)

Hiermee configureert u bindingselementen ter ondersteuning van het contractgedrag.

ApplyClientBehavior(ContractDescription, ServiceEndpoint, ClientRuntime)

Implementeert een wijziging of uitbreiding van de client in een contract.

ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime)

Implementeert een wijziging of uitbreiding van de client in een contract.

Validate(ContractDescription, ServiceEndpoint)

Implementeer om te bevestigen dat het contract en eindpunt het contractgedrag kunnen ondersteunen.

Van toepassing op