IContractBehavior Interface
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Implementa métodos que podem ser usados para estender o comportamento em tempo de execução de um contrato, seja num serviço ou numa aplicação cliente.
public interface class IContractBehavior
public interface IContractBehavior
type IContractBehavior = interface
Public Interface IContractBehavior
- Derivado
Exemplos
O exemplo de código seguinte assume uma implementação personalizada IInstanceProvider chamada ObjectProviderBehavior que fornece um comportamento "singleton"; ela devolve sempre a mesma instância de serviço e não a recicla.
Para inserir a personalização do fornecedor de instâncias, o exemplo mostra como implementar um atributo personalizado (SingletonBehaviorAttribute) que implementa IContractBehavior a inserção do fornecedor de instância de serviço personalizado. Também implementa IContractBehaviorAttribute, que vincula o seu uso ao ISampleService contrato.
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
Observações
Implementar a IContractBehavior interface para modificar, examinar ou estender algum aspeto da execução a nível de contrato ao nível da aplicação. Ao contrário dos IServiceBehavior objetos de An, IEndpointBehaviorIContractBehavior os objetos não podem ser adicionados ao tempo de execução usando um ficheiro de configuração de aplicação; só podem ser adicionados programaticamente ou usando um atributo.
Para mais informações sobre como escolher entre comportamentos de serviço, endpoint e contrato, consulte Configurar e Estender o Tempo de Execução com Comportamentos.
Use o AddBindingParameters método para fornecer elementos de ligação com dados personalizados para suportar o comportamento.
Use o ApplyClientBehavior método para modificar, examinar ou inserir extensões a um contrato numa aplicação cliente.
Use o ApplyDispatchBehavior método para modificar, examinar ou inserir extensões a um contrato numa aplicação de serviço.
Use o Validate método para garantir que um contrato suporta uma determinada funcionalidade.
IContractBehavior Os objetos podem utilizar qualquer um destes métodos, mas muitas vezes apenas um é importante; nesses casos, os métodos não utilizados podem devolver sem qualquer valor.
Note
Todos os IContractBehavior métodos passam System.ServiceModel.Description.ContractDescription e System.ServiceModel.Description.ServiceEndpoint como parâmetros. Estes parâmetros são para exame; Se modificares os objetos, o comportamento de execução é indefinido.
IContractBehavior Os tipos podem ser usados tanto no serviço como no cliente, ou em ambos. Para realizar uma tarefa de personalização no serviço, o IContractBehavior objeto deve ser adicionado à Behaviors propriedade antes da construção do tempo de execução do serviço, que ocorre quando o ICommunicationObject.Open método é chamado ao System.ServiceModel.ServiceHost objeto. Pode fazê-lo de duas formas.
O primeiro método é adicionar programaticamente o comportamento personalizado do contrato à Behaviors propriedade antes do momento em que o ICommunicationObject.Open método é chamado no System.ServiceModel.ServiceHost objeto. Quando aplicado desta forma, o comportamento é aplicado a todas as mensagens que fluem por esse contrato em qualquer ponto final.
Note
O comportamento aplica-se a todos os contratos do mesmo tipo. Por exemplo, se adicionares programaticamente o mesmo tipo de contrato a mais do que um endpoint, o comportamento modifica todos os endpoints que se referem ao mesmo objeto contrato.
O segundo método é criar um atributo personalizado que implemente IContractBehavior e aplicá-lo a:
Uma interface contratual. Neste caso, o comportamento é aplicado a todos os contratos desse tipo em qualquer ponto final.
Uma classe de serviço. Neste caso, o comportamento é aplicado a todos os endpoints independentemente do contrato.
Uma aula de recordação. Neste caso, o comportamento é aplicado ao endpoint do cliente duplex.
O comportamento da segunda abordagem varia ligeiramente se o atributo personalizado também implementar System.ServiceModel.Description.IContractBehaviorAttribute. Neste caso, o comportamento é o seguinte:
Uma interface contratual. Neste caso, o comportamento é aplicado a todos os contratos desse tipo em qualquer endpoint e o Windows Communication Foundation (WCF) ignora o valor da propriedade IContractBehaviorAttribute.TargetContract.
Uma classe de serviço. Neste caso, o comportamento é aplicado apenas aos pontos finais cuja propriedade é definida pelo valor de IContractBehaviorAttribute.TargetContract.
Uma aula de recordação. Nesse caso, o comportamento é aplicado ao endpoint do cliente duplex e o WCF ignora o valor da propriedade IContractBehaviorAttribute.TargetContract.
Para realizar a tarefa de personalização no cliente para o qual se destina, o IContractBehavior objeto deve ser adicionado à Behaviors propriedade antes da construção do tempo de execução do cliente, que ocorre quando ChannelFactory<TChannel>.CreateChannel é chamado. Há duas maneiras de fazer isso:
Adicione programaticamente o comportamento do contrato personalizado à Behaviors propriedade antes do momento em que o ChannelFactory<TChannel>.CreateChannel é chamado.
Crie um atributo personalizado que também implemente IContractBehavior.
Para mais informações sobre a adição IContractBehavior programática de tipos tanto à aplicação cliente como ao serviço, consulte Configurar e Estender o Tempo de Execução com Comportamentos.
Métodos
| Name | Description |
|---|---|
| AddBindingParameters(ContractDescription, ServiceEndpoint, BindingParameterCollection) |
Configura quaisquer elementos de ligação para suportar o comportamento do contrato. |
| ApplyClientBehavior(ContractDescription, ServiceEndpoint, ClientRuntime) |
Implementa uma modificação ou extensão do cliente ao longo de um contrato. |
| ApplyDispatchBehavior(ContractDescription, ServiceEndpoint, DispatchRuntime) |
Implementa uma modificação ou extensão do cliente ao longo de um contrato. |
| Validate(ContractDescription, ServiceEndpoint) |
Implemente para confirmar que o contrato e o endpoint podem suportar o comportamento contratual. |