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 utilizzati per estendere il comportamento in fase di esecuzione per un contratto in un'applicazione client o del servizio.
public interface class IContractBehavior
public interface IContractBehavior
type IContractBehavior = interface
Public Interface IContractBehavior
- Derivato
Esempio
Nell'esempio di codice seguente si presuppone che un'implementazione personalizzata di IInstanceProvider denominata ObjectProviderBehavior
, la quale fornisce un comportamento "Singleton", restituisca sempre la stessa istanza del servizio e non la ricicli.
Come illustrato nell'esempio, per applicare la personalizzazione del provider di istanze è possibile implementare un attributo personalizzato (SingletonBehaviorAttribute
) che implementa l'interfaccia IContractBehavior al fine di inserire il provider di istanze del servizio personalizzato. Implementa inoltre IContractBehaviorAttribute, che associa l'utilizzo al contratto 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
Commenti
Implementare l'interfaccia IContractBehavior per modificare, esaminare o estendere alcuni aspetti dell'esecuzione del contratto a livello di applicazione. A differenza degli oggetti IServiceBehavior e IEndpointBehavior, gli oggetti IContractBehavior non possono essere aggiunti alla fase di esecuzione mediante un file di configurazione dell'applicazione, bensì solo a livello di programmazione o utilizzando un attributo.
Per altre informazioni sulla scelta tra i comportamenti di servizio, endpoint e contratto, vedere Configurazione ed estensione del runtime con comportamenti.
Utilizzare il metodo AddBindingParameters per fornire elementi di associazione con dati personalizzati per supportare il comportamento.
Utilizzare il metodo ApplyClientBehavior per modificare, esaminare o inserire estensioni in un contratto di un'applicazione client.
Utilizzare il metodo ApplyDispatchBehavior per modificare, esaminare o inserire estensioni in un contratto di un'applicazione del servizio.
Utilizzare il metodo Validate per accertarsi che un contratto sia in grado di supportare una determinata funzionalità.
Gli oggetti IContractBehavior possono utilizzare uno o più di questi metodi, ma spesso soltanto uno di essi è importante. In questi casi, è possibile che i metodi non utilizzati non restituiscano alcun valore.
Nota
Tutti i metodi IContractBehavior passano System.ServiceModel.Description.ContractDescription e System.ServiceModel.Description.ServiceEndpoint come parametri. Questi parametri sono utilizzabili a fini di esame. Se gli oggetti vengono modificati, il comportamento di esecuzione risulterà indefinito.
IContractBehavior I tipi possono essere usati nel servizio o nel client o in entrambi. Per eseguire un'attività di personalizzazione nel servizio, è necessario aggiungere l'oggetto IContractBehavior alla proprietà Behaviors prima della costruzione della fase di esecuzione del servizio, che si verifica quando il metodo ICommunicationObject.Open viene chiamato nell'oggetto System.ServiceModel.ServiceHost. Per eseguire questa operazione è possibile procedere in due modi:
Il primo consiste nell'aggiungere a livello di programmazione il comportamento del contratto personalizzato alla proprietà Behaviors prima che il metodo ICommunicationObject.Open venga chiamato nell'oggetto System.ServiceModel.ServiceHost. In questo caso, il comportamento viene applicato per tutti i messaggi che passano attraverso il contratto in qualsiasi endpoint.
Nota
Il comportamento viene applicato a tutti i contratti dello stesso tipo. Se ad esempio si aggiunge lo stesso tipo di contratto a livello di programmazione a più endpoint, il comportamento modifica tutti gli endpoint che fanno riferimento allo stesso oggetto contratto.
La seconda modalità consiste nel creare un attributo personalizzato che implementa IContractBehavior e applicarlo a:
Un'interfaccia di contratto. In questo caso, il comportamento viene applicato a tutti i contratti di quel tipo in qualsiasi endpoint.
Una classe di servizio. In questo caso, il comportamento viene applicato a tutti gli endpoint, indipendentemente dal contratto.
Una classe di callback. In questo caso, il comportamento viene applicato all'endpoint del client duplex.
Il comportamento ottenuto con il secondo approccio varia leggermente se l'attributo personalizzato implementa anche System.ServiceModel.Description.IContractBehaviorAttribute. In questo caso, il comportamento è il seguente:
Un'interfaccia di 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à .
Una classe di servizio. In questo caso, il comportamento viene applicato solo agli endpoint il cui contratto corrisponde al valore della proprietà IContractBehaviorAttribute.TargetContract.
Una 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 sul client al quale è destinata, è necessario aggiungere l'oggetto IContractBehavior alla proprietà Behaviors prima della costruzione della fase di esecuzione del client, che si verifica quando viene chiamato il metodo ChannelFactory<TChannel>.CreateChannel. A questo scopo è possibile procedere in due modi:
Aggiungere a livello di programmazione il comportamento del contratto personalizzato alla proprietà Behaviors prima che il metodo ChannelFactory<TChannel>.CreateChannel venga chiamato.
Creare un attributo personalizzato che implementi anche IContractBehavior.
Per altre informazioni sull'aggiunta IContractBehavior di tipi a livello di codice all'applicazione client o al servizio, vedere Configurazione ed estensione del runtime con comportamenti.
Metodi
AddBindingParameters(ContractDescription, ServiceEndpoint, BindingParameterCollection) |
Configura qualsiasi elemento di associazione affinché supporti il comportamento del contratto. |
ApplyClientBehavior(ContractDescription, ServiceEndpoint, ClientRuntime) |
Implementa una modifica o un'estensione del client all'interno di un contratto. |
ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime) |
Implementa una modifica o un'estensione del client all'interno di un contratto. |
Validate(ContractDescription, ServiceEndpoint) |
Procedere all'implementazione per verificare che il contratto e l'endpoint siano in grado di supportare il comportamento del contratto. |