Associações e elementos de associações
As associações são coleções de elementos de configuração especiais, chamados de elementos de associação, que são avaliados pelo runtime de serviço sempre que um ponto de extremidade de serviço ou cliente esteja sendo construído. O tipo e a ordem dos elementos de associação em uma associação determinam a ordem de seleção e empilhamento dos canais de protocolo e transporte na pilha de canal de um ponto de extremidade.
As associações, especialmente as associações fornecidas pelo sistema, geralmente também têm várias propriedades de configuração que refletem as propriedades mais comumente modificadas dos elementos de associação encapsulados.
Uma associação deve conter exatamente um elemento de associação de transporte. Cada elemento de associação de transporte implica um elemento de associação de codificação de mensagem padrão, que pode ser substituído adicionando no máximo um elemento de associação de codificação de mensagem à associação. Além dos elementos de associação de transporte e codificador, a associação pode conter qualquer número de elementos de associação de protocolo que, juntos, implementam a funcionalidade necessária para o serviço e enviam uma mensagem SOAP de um ponto de extremidade para outro. Para obter detalhes, consulte Usar associações para configurar serviços e clientes.
Estender associações e elementos de associação
O WCF (Windows Communication Foundation) inclui associações fornecidas pelo sistema que abrangem uma ampla variedade de cenários. (Para obter mais informações, consulte Associações fornecidas pelo sistema). Pode haver momentos, no entanto, em que você precisa criar e usar uma associação que não está incluída no WCF. Os cenários a seguir requerem a criação de uma nova associação.
Para usar um novo elemento de associação (como um novo elemento de transporte, codificação ou associação de protocolo), você deve criar uma nova associação que inclua esse elemento de associação. Por exemplo, se tiver adicionado um
UdpTransportBindingElement
personalizado para o transporte UDP, você precisará criar uma nova associação para fazer uso dele. Para obter informações sobre como executar esse comportamento usando o tipo System.ServiceModel.Channels.CustomBinding, consulte Associações personalizadas.Para configurar elementos de associação existentes de uma forma que as associações fornecidas pelo sistema não se exponham em propriedades públicas. Por exemplo, você deve criar uma nova associação para alterar a ordem na qual as operações de assinatura e criptografia são executadas. Para obter informações sobre como executar esse comportamento, consulte Como personalizar uma associação fornecida pelo sistema.
Para estabelecer associações padrão corporativas que exponham apenas opções de configuração específicas. Por exemplo, para criar para sua empresa uma variante do WSHttpBinding para sua empresa, na qual a segurança não pode ser desabilitada, crie uma nova associação que se comporte como a WSHttpBinding, mas com a segurança sempre ativada. Para obter detalhes, consulte Criar associações definidas pelo usuário.
Para executar alguma personalização de metadados, normalmente, mas não necessariamente para configurar ou usar algum elemento de associação personalizado. Para obter mais informações sobre como fornecer suporte de metadados a associações e elementos de associação, consulte Suporte a configuração e metadados.
Canais, associações e elementos de associação
As associações e os elementos de associação são a conexão entre o modelo de programação do aplicativo, que inclui os atributos e comportamentos, e o modelo de canal, que inclui as fábricas e ouvintes, codificadores de mensagens e implementações de transporte e protocolo. Normalmente, os elementos de associação e as associações são implementados para permitir que os canais sejam usados pela camada de aplicativo.
A camada de canal entrega ou recebe mensagens de e para a camada de serviço e transporta essas mensagens entre pontos de extremidade. Em um cliente, a camada de canal é uma pilha de fábricas de canais que criam canais para um ponto de extremidade de rede. Em um serviço, a camada de canal é uma pilha de ouvintes de canal que aceitam canais recebidos em um ponto de extremidade de rede.
Há dois tipos gerais de canais: canais de protocolo e canais de transporte. Os canais de transporte são responsáveis pela transmissão real de uma mensagem de um ponto de extremidade de rede para outro. Os canais de transporte devem ter um codificador de mensagem padrão e devem ser capazes de usar um codificador de mensagem alternativo fornecido por meio de um elemento de associação do codificador de mensagens. Um codificador de mensagens é responsável por transformar um System.ServiceModel.Channels.Message em uma representação de fio e vice-versa. Os canais de protocolo são responsáveis por implementar protocolos de nível SOAP (por exemplo, WS-Security ou WS-ReliableMessaging).
O principal requisito para os canais de transporte e protocolo é que eles implementem as interfaces de canal necessárias. Para criar uma camada de canal de trabalho, eles devem ter fábricas e ouvintes associados e assim por diante. Para usar as implementações de canal do WCF, é necessário haver um elemento de associação associado derivado BindingElement para cada canal e deve haver um elemento de extensão de associação relacionado para inclusão em arquivos de configuração que derivam de BindingElementExtensionElement.
Conforme mencionado anteriormente, os elementos de associação para codificadores de mensagens, protocolo e implementações de canal de transporte podem ser empilhados para formar uma pilha de canais e o mecanismo para alinhá-los em um conjunto ordenado é a associação. Associações e elementos de associação conectam o modelo de programação do aplicativo ao modelo de canal. Você pode usar suas implementações de canal diretamente do código, mas, a menos que codificadores, transportes e protocolos sejam implementados como elementos de associação, eles não podem ser usados no modelo de programação da camada de serviço.
Para obter detalhes sobre o desenvolvimento de canais e seus elementos de associação, consulte Estender a Camada de Canal.