IContractBehavior Interface

Definição

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:

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:

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.

Aplica-se a