IContractBehavior Interfejs
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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:
Programowe dodawanie niestandardowego zachowania kontraktu Behaviors do właściwości przed punktem wywołania ChannelFactory<TChannel>.CreateChannel .
Utwórz atrybut niestandardowy, który implementuje IContractBehaviorrównież element .
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. |