Udostępnij za pośrednictwem


IContractBehavior Interfejs

Definicja

Implementuje metody, które mogą służyć do rozszerzania zachowania czasu wykonywania kontraktu w usłudze lub aplikacji klienckiej.

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

Przykłady

W poniższym przykładzie kodu przyjęto założenie, że implementacja niestandardowa IInstanceProvider o nazwie ObjectProviderBehavior zapewnia zachowanie "pojedynczego" — zawsze zwraca to samo wystąpienie usługi i nie przetwarza go.

Aby wstawić dostosowanie dostawcy wystąpień, w przykładzie pokazano, jak zaimplementować atrybut niestandardowy (SingletonBehaviorAttribute), który implementuje IContractBehavior wstawianie niestandardowego dostawcy wystąpienia usługi. Implementuje IContractBehaviorAttributerównież element , który wiąże jego użycie z kontraktem 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

Uwagi

Zaimplementuj interfejs, IContractBehavior aby zmodyfikować, zbadać lub rozszerzyć jakiś aspekt wykonywania w całej umowie na poziomie aplikacji. W przeciwieństwie do IServiceBehavior obiektów i IEndpointBehavior nie można dodawać obiektów IContractBehavior do środowiska uruchomieniowego przy użyciu pliku konfiguracji aplikacji. Można je dodawać tylko programowo lub za pomocą atrybutu.

Aby uzyskać więcej informacji na temat wybierania między zachowaniami usługi, punktu końcowego i kontraktu, zobacz Konfigurowanie i rozszerzanie środowiska uruchomieniowego przy użyciu zachowań.

  • AddBindingParameters Użyj metody , aby zapewnić elementy powiązania z danymi niestandardowymi w celu obsługi zachowania.

  • ApplyClientBehavior Użyj metody , aby zmodyfikować, zbadać lub wstawić rozszerzenia do kontraktu w aplikacji klienckiej.

  • ApplyDispatchBehavior Użyj metody , aby zmodyfikować, zbadać lub wstawić rozszerzenia do kontraktu w aplikacji usługi.

  • Validate Użyj metody , aby upewnić się, że kontrakt może obsługiwać określoną funkcję.

IContractBehavior obiekty mogą korzystać z dowolnej z tych metod, ale często tylko jedna z nich jest ważna; w takich przypadkach nieużywane metody mogą zwracać bez żadnej wartości.

Uwaga

IContractBehavior Wszystkie metody są przekazywane System.ServiceModel.Description.ContractDescription i System.ServiceModel.Description.ServiceEndpoint jako parametry. Te parametry są przeznaczone do badania; jeśli zmodyfikujesz obiekty, zachowanie wykonywania jest niezdefiniowane.

IContractBehavior typy mogą być używane w usłudze lub kliencie albo w obu tych usługach. Aby wykonać zadanie dostosowywania w usłudze, IContractBehavior obiekt musi zostać dodany do Behaviors właściwości przed utworzeniem środowiska uruchomieniowego usługi, który występuje, gdy ICommunicationObject.Open metoda jest wywoływana System.ServiceModel.ServiceHost w obiekcie . Istnieją dwa sposoby, aby to zrobić.

Pierwszą metodą jest programowe dodawanie niestandardowego zachowania kontraktu do Behaviors właściwości przed punktem wywołania ICommunicationObject.Open System.ServiceModel.ServiceHost metody w obiekcie . Po zastosowaniu w ten sposób zachowanie jest stosowane dla wszystkich komunikatów przepływających przez ten kontrakt w dowolnym punkcie końcowym.

Uwaga

Zachowanie jest stosowane do wszystkich kontraktów tego samego typu. Jeśli na przykład programowo dodasz ten sam typ kontraktu do więcej niż jednego punktu końcowego, zachowanie modyfikuje wszystkie punkty końcowe odwołujące się do tego samego obiektu kontraktu.

Drugą metodą jest utworzenie atrybutu niestandardowego, który implementuje IContractBehavior i stosuje go do:

  • Interfejs kontraktu. W takim przypadku zachowanie jest stosowane do wszystkich kontraktów tego typu w dowolnym punkcie końcowym.

  • Klasa usługi. W takim przypadku zachowanie jest stosowane do wszystkich punktów końcowych niezależnie od kontraktu.

  • Klasa wywołania zwrotnego. W takim przypadku zachowanie jest stosowane do punktu końcowego klienta dwukierunkowego.

Zachowanie drugiego podejścia różni się nieznacznie, jeśli atrybut niestandardowy również implementuje System.ServiceModel.Description.IContractBehaviorAttributeelement . W takim przypadku zachowanie jest następujące:

  • Interfejs kontraktu. W tym przypadku zachowanie jest stosowane do wszystkich kontraktów tego typu w dowolnym punkcie końcowym i Windows Communication Foundation (WCF) ignoruje wartość IContractBehaviorAttribute.TargetContract właściwości.

  • Klasa usługi. W tym przypadku zachowanie jest stosowane tylko do punktów końcowych, których kontrakt jest wartością IContractBehaviorAttribute.TargetContract właściwości.

  • Klasa wywołania zwrotnego. W takim przypadku zachowanie jest stosowane do punktu końcowego klienta dwukierunkowego, a program WCF ignoruje wartość IContractBehaviorAttribute.TargetContract właściwości .

Aby wykonać zadanie dostosowywania na kliencie, dla którego jest on przeznaczony, IContractBehavior należy dodać obiekt do Behaviors właściwości przed rozpoczęciem budowy środowiska uruchomieniowego klienta, który występuje po ChannelFactory<TChannel>.CreateChannel wywołaniu. Istnieją dwa sposoby wykonania tej czynności:

Aby uzyskać więcej informacji na temat programowego dodawania IContractBehavior typów do aplikacji klienta lub usługi, zobacz Konfigurowanie i rozszerzanie środowiska uruchomieniowego przy użyciu zachowań.

Metody

AddBindingParameters(ContractDescription, ServiceEndpoint, BindingParameterCollection)

Konfiguruje wszystkie elementy powiązania w celu obsługi zachowania kontraktu.

ApplyClientBehavior(ContractDescription, ServiceEndpoint, ClientRuntime)

Implementuje modyfikację lub rozszerzenie klienta w ramach kontraktu.

ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime)

Implementuje modyfikację lub rozszerzenie klienta w ramach kontraktu.

Validate(ContractDescription, ServiceEndpoint)

Zaimplementuj, aby potwierdzić, że kontrakt i punkt końcowy mogą obsługiwać zachowanie kontraktu.

Dotyczy