Partilhar via


Extensão de clientes

Em um aplicativo de chamada, a camada de modelo de serviço é responsável por traduzir invocações de método no código do aplicativo em mensagens de saída, enviando-as para os canais subjacentes, traduzindo os resultados de volta em valores de retorno e parâmetros de saída no código do aplicativo e retornando os resultados de volta para o chamador. As extensões de modelo de serviço modificam ou implementam o comportamento de execução ou comunicação e os recursos que envolvem a funcionalidade do cliente ou do dispatcher, comportamentos personalizados, intercetação de mensagens e parâmetros e outras funcionalidades de extensibilidade.

Este tópico descreve como usar as ClientRuntime classes e ClientOperation em um aplicativo cliente WCF (Windows Communication Foundation) para modificar o comportamento de execução padrão de um cliente WCF ou para intercetar ou modificar mensagens, parâmetros ou valores de retorno antes ou depois de enviá-los ou recuperá-los da camada de canal. Para obter mais informações sobre como estender o tempo de execução do serviço, consulte Estendendo despachantes. Para obter mais informações sobre os comportamentos que modificam e inserem objetos de personalização no tempo de execução do cliente, consulte Configurando e estendendo o tempo de execução com comportamentos.

Clientes

Em um cliente, um objeto de cliente WCF ou canal de cliente converte invocações de método em mensagens de saída e mensagens de entrada em resultados de operação que são retornados para o aplicativo de chamada. (Para obter mais informações sobre tipos de cliente, consulte Arquitetura de cliente WCF.)

Os tipos de cliente WCF têm tipos de tempo de execução que manipulam essa funcionalidade de ponto de extremidade e nível de operação. Quando um aplicativo chama uma operação, o ClientOperation traduz os objetos de saída em uma mensagem, processa intercetadores, confirma que a chamada de saída está em conformidade com o contrato de destino e entrega a mensagem de saída para o ClientRuntime, que é responsável por criar e gerenciar canais de saída (e canais de entrada no caso de serviços duplex), manipulando o processamento extra de mensagens de saída (como modificação de cabeçalho), processamento de intercetadores de mensagens em ambas as direções e roteamento de chamadas duplex de entrada para o objeto apropriado do lado DispatchRuntime do cliente. Ambos os e ClientRuntime fornecer serviços semelhantes quando as ClientOperation mensagens (incluindo falhas) são devolvidas ao cliente.

Essas duas classes de tempo de execução são a principal extensão para personalizar o processamento de objetos e canais de cliente WCF. A ClientRuntime classe permite que os usuários intercetem e estendam a execução do cliente em todas as mensagens do contrato. A ClientOperation classe permite que os usuários intercetem e estendam a execução do cliente para todas as mensagens em uma determinada operação.

Modificar as propriedades ou inserir personalizações é feito usando comportamentos de contrato, ponto de extremidade e operação. Para obter mais informações sobre como usar esses tipos de comportamentos para executar personalizações de tempo de execução do cliente, consulte Configurando e estendendo o tempo de execução com comportamentos.

Cenários

Há uma série de razões para estender o sistema do cliente, incluindo:

Usando a classe ClientRuntime

A ClientRuntime classe é um ponto de extensibilidade ao qual você pode adicionar objetos de extensão que intercetam mensagens e estendem o comportamento do cliente. Os objetos de intercetação podem processar todas as mensagens em um contrato específico, processar apenas mensagens para operações específicas, executar inicialização de canal personalizado e implementar outro comportamento de aplicativo cliente personalizado.

  • A CallbackDispatchRuntime propriedade retorna o objeto de tempo de execução de despacho para clientes de retorno de chamada iniciados pelo serviço.

  • A OperationSelector propriedade aceita um objeto seletor de operação personalizado.

  • A ChannelInitializers propriedade permite a adição de um inicializador de canal que pode inspecionar ou modificar o canal do cliente.

  • A Operations propriedade obtém uma coleção de objetos aos quais você pode adicionar intercetadores de ClientOperation mensagens personalizados que fornecem funcionalidade específica para as mensagens dessa operação.

  • A ManualAddressing propriedade permite que um aplicativo desative alguns cabeçalhos de endereçamento automático para controlar diretamente o endereçamento.

  • A Via propriedade define o valor do destino da mensagem no nível de transporte para oferecer suporte a intermediários e outros cenários.

  • A MessageInspectors propriedade obtém uma coleção de objetos aos quais você pode adicionar intercetadores de mensagens personalizados para todas as mensagens que viajam através de IClientMessageInspector um cliente WCF.

Além disso, há uma série de outras propriedades que recuperam as informações do contrato:

Se o cliente WCF for um cliente WCF duplex, as seguintes propriedades também recuperarão as informações do cliente WCF de retorno de chamada:

Para estender a execução do cliente WCF em um cliente WCF inteiro, examine as ClientRuntime propriedades disponíveis na classe para ver se modificar uma propriedade ou implementar uma interface e adicioná-la a uma propriedade cria a funcionalidade que você está procurando. Depois de escolher uma extensão específica para compilar, insira sua extensão na propriedade apropriada ClientRuntime implementando um comportamento de cliente que forneça acesso à ClientRuntime classe quando invocado.

Você pode inserir objetos de extensão personalizados em uma coleção usando um comportamento de operação (um objeto que implementa IOperationBehavior), um comportamento de contrato (um objeto que implementa IContractBehavior) ou um comportamento de ponto de extremidade (um objeto que implementa IEndpointBehavior). O objeto de comportamento de instalação é adicionado à coleção apropriada de comportamentos programaticamente, declarativamente (implementando um atributo personalizado) ou implementando um objeto personalizado BehaviorExtensionElement para permitir que o comportamento seja inserido usando um arquivo de configuração do aplicativo. Para obter detalhes, consulte Configurando e estendendo o tempo de execução com comportamentos.

Para obter exemplos que demonstram a intercetação em um cliente WCF, consulte Como inspecionar ou modificar mensagens no cliente.

Usando a classe ClientOperation

A ClientOperation classe é o local para modificações em tempo de execução do cliente e ponto de inserção para extensões personalizadas que têm como escopo apenas uma operação de serviço. (Para modificar o comportamento em tempo de execução do cliente para todas as mensagens em um contrato, use a ClientRuntime classe.)

Use a Operations propriedade para localizar o ClientOperation objeto que representa uma operação de serviço específica. As propriedades a seguir permitem que você insira objetos personalizados no sistema cliente WCF:

As propriedades a seguir permitem que você modifique o sistema em interação com o formatador e os inspetores de parâmetros personalizados:

  • Use a SerializeRequest propriedade para controlar a serialização de uma mensagem de saída.

  • Use a DeserializeReply propriedade para controlar a desserialização de uma mensagem de entrada.

  • Use a Action propriedade para controlar a ação WS-Addressing da mensagem de solicitação.

  • Use o e EndMethod para especificar quais métodos de cliente WCF estão associados a uma operação assíncronaBeginMethod.

  • Use a FaultContractInfos propriedade para obter uma coleção que contém os tipos que podem aparecer em falhas SOAP como o tipo de detalhe.

  • Use as IsInitiating propriedades e IsTerminating para controlar se uma sessão é iniciada ou é derrubada, respectivamente, quando a operação é chamada.

  • Use a IsOneWay propriedade para controlar se a operação é unidirecional.

  • Use a Parent propriedade para obter o objeto que contém ClientRuntime .

  • Use a Name propriedade para obter o nome da operação.

  • Use a SyncMethod propriedade para controlar qual método é mapeado para a operação.

Para estender a execução do cliente WCF em apenas uma operação de serviço, examine as ClientOperation propriedades disponíveis na classe para ver se modificar uma propriedade ou implementar uma interface e adicioná-la a uma propriedade cria a funcionalidade que você está procurando. Depois de escolher uma extensão específica para compilar, insira sua extensão na propriedade apropriada ClientOperation implementando um comportamento de cliente que forneça acesso à ClientOperation classe quando invocado. Dentro desse comportamento, você pode modificar a ClientRuntime propriedade para atender às suas necessidades.

Normalmente, a implementação de um comportamento de operação (um objeto que implementa a IOperationBehavior interface) é suficiente, mas você também pode usar comportamentos de ponto de extremidade e comportamentos de contrato para realizar a mesma coisa, localizando o OperationDescription para uma operação específica e anexando o comportamento lá. Para obter detalhes, consulte Configurando e estendendo o tempo de execução com comportamentos.

Para usar seu comportamento personalizado da configuração, instale seu comportamento usando um manipulador de seção de configuração de comportamento personalizado. Você também pode instalar seu comportamento criando um atributo personalizado.

Para obter exemplos que demonstram a intercetação em um cliente WCF, consulte Como inspecionar ou modificar parâmetros.

Consulte também