IContractBehavior Gränssnitt

Definition

Implementerar metoder som kan användas för att utöka körningsbeteendet för ett kontrakt i antingen en tjänst eller ett klientprogram.

public interface class IContractBehavior
public interface IContractBehavior
type IContractBehavior = interface
Public Interface IContractBehavior
Härledda

Exempel

I följande kodexempel förutsätts en anpassad IInstanceProvider implementering med namnet ObjectProviderBehavior som ger ett "singleton"-beteende. Den returnerar alltid samma tjänstinstans och återvinner den inte.

Om du vill infoga anpassningen av instansprovidern visar exemplet hur du implementerar ett anpassat attribut (SingletonBehaviorAttribute) som implementeras IContractBehavior för att infoga instansprovidern för anpassade tjänster. Den implementerar IContractBehaviorAttributeockså , som binder dess användning till ISampleService kontraktet.

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

Kommentarer

IContractBehavior Implementera gränssnittet för att ändra, undersöka eller utöka någon aspekt av kontraktsomfattande körning på programnivå. Till skillnad från IServiceBehavior och IEndpointBehavior objekt IContractBehavior kan objekt inte läggas till i körningen med hjälp av en programkonfigurationsfil. De kan bara läggas till programmatiskt eller med hjälp av ett attribut.

Mer information om hur du väljer mellan tjänst-, slutpunkts- och kontraktsbeteenden finns i Konfigurera och utöka körningen med beteenden.

  • AddBindingParameters Använd metoden för att tillhandahålla bindningselement med anpassade data för att stödja beteendet.

  • ApplyClientBehavior Använd metoden för att ändra, undersöka eller infoga tillägg till ett kontrakt i ett klientprogram.

  • ApplyDispatchBehavior Använd metoden för att ändra, undersöka eller infoga tillägg till ett kontrakt i ett tjänstprogram.

  • Använd metoden Validate för att säkerställa att ett kontrakt kan stödja en viss funktion.

IContractBehavior objekt kan använda någon av dessa metoder, men ofta är bara en viktig; I sådana fall kan de oanvända metoderna returneras utan något värde.

Note

Alla metoder skickas IContractBehaviorSystem.ServiceModel.Description.ContractDescription och System.ServiceModel.Description.ServiceEndpoint som parametrar. Dessa parametrar är för undersökning; om du ändrar objekten är körningsbeteendet odefinierat.

IContractBehavior kan användas på antingen tjänsten eller klienten, eller både och. För att kunna utföra en anpassningsuppgift för tjänsten IContractBehavior måste objektet läggas till i Behaviors egenskapen innan servicekörningen byggs, vilket inträffar när ICommunicationObject.Open metoden anropas för System.ServiceModel.ServiceHost objektet. Det finns två sätt att göra detta på.

Den första metoden är att programmatiskt lägga till det anpassade kontraktsbeteendet i Behaviors egenskapen före den punkt då ICommunicationObject.Open metoden anropas för System.ServiceModel.ServiceHost objektet. När det tillämpas på det här sättet tillämpas beteendet för alla meddelanden som flödar genom kontraktet på valfri slutpunkt.

Note

Beteendet tillämpas på alla kontrakt av samma typ. Om du till exempel programmatiskt lägger till samma kontraktstyp i mer än en slutpunkt ändrar beteendet alla slutpunkter som refererar till samma kontraktobjekt.

Den andra metoden är att skapa ett anpassat attribut som implementerar IContractBehavior och tillämpar det på:

  • Ett kontraktsgränssnitt. I det här fallet tillämpas beteendet på alla kontrakt av den typen i valfri slutpunkt.

  • En tjänstklass. I det här fallet tillämpas beteendet på alla slutpunkter oavsett kontrakt.

  • En motringningsklass. I det här fallet tillämpas beteendet på duplex-klientens slutpunkt.

Beteendet för den andra metoden varierar något om det anpassade attributet även implementerar System.ServiceModel.Description.IContractBehaviorAttribute. I det här fallet är beteendet följande:

För att kunna utföra anpassningsuppgiften på klienten som den är avsedd IContractBehavior för måste objektet läggas till i Behaviors egenskapen innan klientkörningen byggs, vilket inträffar när ChannelFactory<TChannel>.CreateChannel anropas. Det finns två sätt att göra detta:

Mer information om hur du programmatiskt lägger IContractBehavior till typer i klient- eller tjänstprogrammet finns i Konfigurera och utöka körningen med beteenden.

Metoder

Name Description
AddBindingParameters(ContractDescription, ServiceEndpoint, BindingParameterCollection)

Konfigurerar alla bindningselement för att stödja kontraktsbeteendet.

ApplyClientBehavior(ContractDescription, ServiceEndpoint, ClientRuntime)

Implementerar en ändring eller ett tillägg av klienten i ett kontrakt.

ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime)

Implementerar en ändring eller ett tillägg av klienten i ett kontrakt.

Validate(ContractDescription, ServiceEndpoint)

Implementera för att bekräfta att kontraktet och slutpunkten kan stödja kontraktsbeteendet.

Gäller för