IContractBehavior Interfaccia
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Implementa metodi che possono essere usati per estendere il comportamento di runtime per un contratto in un servizio o in un'applicazione client.
public interface class IContractBehavior
public interface IContractBehavior
type IContractBehavior = interface
Public Interface IContractBehavior
- Derivato
Esempio
Nell'esempio di codice seguente si presuppone un'implementazione personalizzata IInstanceProvider denominata ObjectProviderBehavior che fornisce un comportamento "singleton". Restituisce sempre la stessa istanza del servizio e non la ricicla.
Per inserire la personalizzazione del provider di istanze, nell'esempio viene illustrato come implementare un attributo personalizzato (SingletonBehaviorAttribute) che implementa IContractBehavior per inserire il provider di istanze del servizio personalizzato. Implementa IContractBehaviorAttributeanche , che associa l'uso ISampleService al contratto.
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
Commenti
Implementare l'interfaccia IContractBehavior per modificare, esaminare o estendere alcuni aspetti dell'esecuzione a livello di contratto a livello di applicazione. A differenza degli IServiceBehavior oggetti e IEndpointBehavior , IContractBehavior gli oggetti non possono essere aggiunti al runtime usando un file di configurazione dell'applicazione, ma possono essere aggiunti solo a livello di codice o usando un attributo .
Per altre informazioni sulla scelta tra i comportamenti di servizio, endpoint e contratto, vedere Configurazione ed estensione del runtime con comportamenti.
Usare il AddBindingParameters metodo per fornire elementi di associazione con dati personalizzati per supportare il comportamento.
Usare il ApplyClientBehavior metodo per modificare, esaminare o inserire estensioni in un contratto in un'applicazione client.
Utilizzare il ApplyDispatchBehavior metodo per modificare, esaminare o inserire estensioni in un contratto in un'applicazione di servizio.
Usare il Validate metodo per assicurarsi che un contratto possa supportare una particolare funzionalità.
IContractBehavior gli oggetti possono utilizzare uno di questi metodi, ma spesso solo uno è importante; in questi casi, i metodi inutilizzati possono restituire senza alcun valore.
Annotazioni
Tutti i IContractBehavior metodi passano System.ServiceModel.Description.ContractDescription e System.ServiceModel.Description.ServiceEndpoint come parametri. Questi parametri sono destinati all'esame; se si modificano gli oggetti il comportamento di esecuzione non è definito.
IContractBehavior I tipi possono essere usati nel servizio o nel client o in entrambi. Per eseguire un'attività di personalizzazione nel servizio, l'oggetto IContractBehavior deve essere aggiunto alla Behaviors proprietà prima della costruzione del runtime del servizio, che si verifica quando viene chiamato il ICommunicationObject.Open metodo sull'oggetto System.ServiceModel.ServiceHost . Esistono due modi per eseguire questa operazione.
Il primo metodo consiste nell'aggiungere a livello di codice il comportamento del contratto personalizzato alla Behaviors proprietà prima del punto in cui viene chiamato il ICommunicationObject.Open metodo sull'oggetto System.ServiceModel.ServiceHost . Se applicato in questo modo, il comportamento viene applicato per tutti i messaggi che passano attraverso tale contratto in qualsiasi endpoint.
Annotazioni
Il comportamento viene applicato a tutti i contratti dello stesso tipo. Ad esempio, se si aggiunge lo stesso tipo di contratto a livello di codice a più endpoint, il comportamento modifica tutti gli endpoint che fanno riferimento allo stesso oggetto contratto.
Il secondo metodo consiste nel creare un attributo personalizzato che implementa IContractBehavior e applicarlo a:
Interfaccia del contratto. In questo caso, il comportamento viene applicato a tutti i contratti di quel tipo in qualsiasi endpoint.
Classe di servizio. In questo caso, il comportamento viene applicato a tutti gli endpoint indipendentemente dal contratto.
Classe di callback. In questo caso, il comportamento viene applicato all'endpoint del client duplex.
Il comportamento del secondo approccio varia leggermente se l'attributo personalizzato implementa System.ServiceModel.Description.IContractBehaviorAttributeanche . In questo caso, il comportamento è il seguente:
Interfaccia del contratto. In questo caso, il comportamento viene applicato a tutti i contratti di quel tipo in qualsiasi endpoint e Windows Communication Foundation (WCF) ignora il valore della IContractBehaviorAttribute.TargetContract proprietà.
Classe di servizio. In questo caso, il comportamento viene applicato solo agli endpoint il cui contratto corrisponde al valore della proprietà IContractBehaviorAttribute.TargetContract.
Classe di callback. In questo caso, il comportamento viene applicato all'endpoint del client duplex e WCF ignora il valore della IContractBehaviorAttribute.TargetContract proprietà .
Per eseguire l'attività di personalizzazione nel client per cui è prevista, l'oggetto IContractBehavior deve essere aggiunto alla Behaviors proprietà prima della costruzione del runtime client, che si verifica quando ChannelFactory<TChannel>.CreateChannel viene chiamato. Esistono due modi per eseguire questa operazione:
Aggiungere a livello di codice il comportamento del contratto personalizzato alla Behaviors proprietà prima del punto in cui viene chiamato .ChannelFactory<TChannel>.CreateChannel
Creare un attributo personalizzato che implementa IContractBehavioranche .
Per altre informazioni sull'aggiunta IContractBehavior di tipi a livello di codice all'applicazione client o di servizio, vedere Configurazione ed estensione del runtime con comportamenti.
Metodi
| Nome | Descrizione |
|---|---|
| AddBindingParameters(ContractDescription, ServiceEndpoint, BindingParameterCollection) |
Configura tutti gli elementi di associazione per supportare il comportamento del contratto. |
| ApplyClientBehavior(ContractDescription, ServiceEndpoint, ClientRuntime) |
Implementa una modifica o un'estensione del client in un contratto. |
| ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime) |
Implementa una modifica o un'estensione del client in un contratto. |
| Validate(ContractDescription, ServiceEndpoint) |
Implementare per verificare che il contratto e l'endpoint possano supportare il comportamento del contratto. |