IContractBehavior Interface
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
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:
Een contractinterface. In dit geval wordt het gedrag toegepast op alle contracten van dat type in een eindpunt en Windows Communication Foundation (WCF) negeert de waarde van de eigenschap IContractBehaviorAttribute.TargetContract.
Een serviceklasse. In dit geval wordt het gedrag alleen toegepast op eindpunten waarvan het contract de waarde van de IContractBehaviorAttribute.TargetContract eigenschap is.
Een callback-klasse. In dit geval wordt het gedrag toegepast op het eindpunt van de duplex-client en negeert WCF de waarde van de IContractBehaviorAttribute.TargetContract eigenschap.
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:
Voeg programmatisch het gedrag van het aangepaste contract toe aan de Behaviors eigenschap voordat het ChannelFactory<TChannel>.CreateChannel punt wordt aangeroepen.
Maak een aangepast kenmerk dat ook wordt geïmplementeerd IContractBehavior.
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. |