Partilhar via


Criando um elemento de vinculação

Ligações e elementos de ligação (objetos que se estendem System.ServiceModel.Channels.Binding e System.ServiceModel.Channels.BindingElement, respectivamente) são o ponto onde o modelo de aplicação do Windows Communication Foundation (WCF) está associado a fábricas de canais e ouvintes de canal. Sem associações, o uso de canais personalizados requer programação no nível do canal, conforme descrito em Service Channel-Level Programming e Client Channel-Level Programming. Este tópico discute o requisito mínimo para habilitar o uso de seu canal no WCF, o desenvolvimento de um BindingElement para seu canal e habilitar o uso do aplicativo, conforme descrito na etapa 4 de Desenvolvendo canais.

Visão geral

Criar um BindingElement para seu canal permite que os desenvolvedores o usem em um aplicativo WCF. BindingElement objetos podem ser usados a partir da classe System.ServiceModel.ServiceHost para conectar uma aplicação WCF ao seu canal sem precisar das informações precisas de tipo do seu canal.

Depois de BindingElement criado, pode-se ativar mais funcionalidades conforme necessário, seguindo os passos restantes do desenvolvimento de canais descritos em Desenvolvimento de Canais.

Adicionando um elemento de vinculação

Para implementar um personalizado BindingElement, escreva uma classe que herda do BindingElement. Por exemplo, se desenvolveste um ChunkingChannel que pode dividir mensagens grandes em partes e remontá-las na outra extremidade, podes usar este canal em qualquer binding ao implementar um BindingElement e configurar a associação para utilizá-lo. O restante deste tópico usa o ChunkingChannel como um exemplo para demonstrar os requisitos de implementação de um elemento de vinculação.

A ChunkingBindingElement é responsável pela criação do ChunkingChannelFactory e ChunkingChannelListener. Ele substitui as implementações de CanBuildChannelFactory e CanBuildChannelListener e verifica se o parâmetro de tipo é IDuplexSessionChannel (em nosso exemplo, esta é a única forma de canal suportada pelo ChunkingChannel) e se os outros elementos de ligação na associação suportam essa forma de canal.

BuildChannelFactory Primeiro, verifica se a forma de canal solicitada pode ser criada e, em seguida, obtém uma lista de ações de mensagem a serem divididas. Em seguida, cria um novo ChunkingChannelFactory, passando-o para a fábrica de canais interna. (Se estiver a criar um elemento de ligação de transporte, esse elemento será o último na pilha de ligação e, portanto, deverá criar um ouvinte de canal ou uma fábrica de canais.)

BuildChannelListener tem uma implementação semelhante para criar ChunkingChannelListener e passar o ouvinte do canal interno.

Como outro exemplo usando um canal de transporte, o exemplo Transport: UDP fornece a seguinte substituição.

Na amostra, o elemento de ligação é UdpTransportBindingElement, que deriva de TransportBindingElement. Ele substitui os seguintes métodos para construir as fábricas associadas ao canal.

public IChannelFactory<TChannel> BuildChannelFactory<TChannel>(BindingContext context)  
{  
    return (IChannelFactory<TChannel>)(object)new UdpChannelFactory(this, context);  
}  
  
public IChannelListener<TChannel> BuildChannelListener<TChannel>(BindingContext context)  
{  
    return (IChannelListener<TChannel>)(object)new UdpChannelListener(this, context);  
}  

Ele também contém membros para clonar o BindingElement e retornar o nosso esquema de endereçamento (soap.udp).

Elementos de vinculação de protocolo

Novos elementos de ligação podem substituir ou aumentar qualquer um dos elementos de ligação incluídos, adicionando novos transportes, codificações ou protocolos de nível superior. Para criar um novo elemento de vinculação de protocolo, comece estendendo a BindingElement classe. No mínimo, você deve implementar o BindingElement.Clone e implementar o ChannelProtectionRequirements usando o IChannel.GetProperty. Isso retorna o ChannelProtectionRequirements para este elemento de ligação. Para obter mais informações, consulte ChannelProtectionRequirements.

Clone deve retornar uma nova cópia deste elemento de ligação. Como prática recomendada, aconselhamos que os autores do elemento de binding implementem Clone utilizando um construtor de cópia que invoca o construtor de cópia base, e depois clone quaisquer campos adicionais nesta classe.

Elementos de ligação de transporte

Para criar um novo elemento de vinculação de transporte, estenda a TransportBindingElement interface. No mínimo, deve implementar o método Clone e a propriedade TransportBindingElement.Scheme.

Clone – Deve devolver uma nova cópia deste Elemento Vinculativo. Como prática recomendada, nós recomendamos que os autores do Binding Element implementem Clone por meio de um construtor de cópia que chame o construtor de cópia base e, em seguida, clone quaisquer campos adicionais nesta classe.

Scheme – A Scheme propriedade get retorna o esquema de URI para o protocolo de transporte representado pelo elemento de ligação. Por exemplo, o System.ServiceModel.Channels.HttpTransportBindingElement e o System.ServiceModel.Channels.TcpTransportBindingElement retornam "http" e "net.tcp" das suas respetivas propriedades Scheme.

Codificação de elementos de vinculação

Para criar novos elementos de vinculação de codificação, comece estendendo a BindingElement classe e implementando a System.ServiceModel.Channels.MessageEncodingBindingElement classe. No mínimo, você deve implementar os métodos Clone, MessageEncodingBindingElement.CreateMessageEncoderFactory e a propriedade MessageEncodingBindingElement.MessageVersion.

  • Clone. Retorna uma nova cópia desse elemento de ligação. Como prática recomendada, aconselhamos que os autores do elemento de binding implementem Clone utilizando um construtor de cópia que invoca o construtor de cópia base, e depois clone quaisquer campos adicionais nesta classe.

  • CreateMessageEncoderFactory. Retorna um MessageEncoderFactory, que fornece um identificador para a classe real que implementa o novo codificador e que deve estender MessageEncoder. Para obter mais informações, consulte MessageEncoderFactory e MessageEncoder.

  • MessageVersion. Retorna o MessageVersion usado nesta codificação, que representa as versões de SOAP e WS-Addressing em uso.

Para obter uma lista completa de métodos e propriedades opcionais para elementos de vinculação de codificação definidos pelo usuário, consulte MessageEncodingBindingElement.

Para obter mais informações sobre como criar um novo elemento de vinculação, consulte Criando ligações User-Defined.

Depois de criar um elemento de vinculação para seu canal, retorne ao tópico Desenvolvendo canais para ver se deseja adicionar suporte a arquivos de configuração ao elemento de vinculação, se e como adicionar suporte a publicação de metadados e se e como construir uma associação definida pelo usuário que use seu elemento de vinculação.

Ver também