Partilhar via


Conceitos fundamentais do Windows Communication Foundation

Este documento fornece uma exibição de alto nível da arquitetura do Windows Communication Foundation (WCF). Pretende-se explicar conceitos-chave e como se encaixam. Para obter um tutorial sobre como criar a versão mais simples de um serviço e cliente WCF, consulte Tutorial de introdução. Para aprender programação WCF, consulte Programação básica WCF.

Fundamentos do WCF

WCF é um tempo de execução e um conjunto de APIs para criar sistemas que enviam mensagens entre serviços e clientes. A mesma infraestrutura e APIs são usadas para criar aplicativos que se comunicam com outros aplicativos no mesmo sistema de computador ou em um sistema que reside em outra empresa e é acessado pela Internet.

Mensagens e pontos de extremidade

O WCF é baseado na noção de comunicação baseada em mensagem, e qualquer coisa que possa ser modelada como uma mensagem (por exemplo, uma solicitação HTTP ou uma mensagem do serviço de enfileiramento de mensagens (também conhecida como MSMQ) pode ser representada de maneira uniforme no modelo de programação. Isso permite uma API unificada em diferentes mecanismos de transporte.

O modelo distingue entre clientes, que são aplicativos que iniciam a comunicação, e serviços, que são aplicativos que esperam que os clientes se comuniquem com eles e respondam a essa comunicação. Um único aplicativo pode atuar como um cliente e um serviço. Para obter exemplos, consulte Serviços duplex e rede ponto a ponto.

As mensagens são enviadas entre pontos de extremidade. Os pontos de extremidade são locais onde as mensagens são enviadas ou recebidas (ou ambos) e definem todas as informações necessárias para a troca de mensagens. Um serviço expõe um ou mais pontos de extremidade de aplicativo (bem como zero ou mais pontos de extremidade de infraestrutura) e o cliente gera um ponto de extremidade compatível com um dos pontos de extremidade do serviço.

Um ponto de extremidade descreve de forma padrão onde as mensagens devem ser enviadas, como devem ser enviadas e como as mensagens devem parecer. Um serviço pode expor essas informações como metadados que os clientes podem processar para gerar clientes WCF apropriados e pilhas de comunicação.

Protocolos de Comunicação

Um elemento necessário da pilha de comunicação é o protocolo de transporte. As mensagens podem ser enviadas através de intranets e da Internet usando transportes comuns, como HTTP e TCP. Outros transportes estão incluídos que suportam a comunicação com aplicativos e nós do serviço de enfileiramento de mensagens em uma malha de rede de mesmo nível. Mais mecanismos de transporte podem ser adicionados usando os pontos de extensão internos do WCF.

Outro elemento necessário na pilha de comunicação é a codificação que especifica como qualquer mensagem é formatada. WCF fornece as seguintes codificações:

  • Codificação de texto, uma codificação interoperável.

  • Codificação MTOM (Message Transmission Optimization Mechanism), que é uma forma interoperável de enviar eficientemente dados binários não estruturados de e para um serviço.

  • Codificação binária para uma transferência eficiente.

Mais mecanismos de codificação (por exemplo, uma codificação de compressão) podem ser adicionados usando os pontos de extensão internos do WCF.

Padrões de mensagem

O WCF oferece suporte a vários padrões de mensagens, incluindo solicitação-resposta, comunicação unidirecional e duplex. Transportes diferentes suportam diferentes padrões de mensagens e, portanto, afetam os tipos de interações que eles suportam. As APIs e o tempo de execução do WCF também ajudam você a enviar mensagens de forma segura e confiável.

Termos do WCF

Outros conceitos e termos usados na documentação do WCF incluem o seguinte:

Mensagem
Uma unidade autónoma de dados que pode consistir em várias partes, incluindo um corpo e cabeçalhos.

Serviço
Uma construção que expõe um ou mais pontos de extremidade, com cada ponto de extremidade expondo uma ou mais operações de serviço.

Ponto final
Uma construção na qual as mensagens são enviadas ou recebidas (ou ambas). Ele compreende um local (um endereço) que define para onde as mensagens podem ser enviadas, uma especificação do mecanismo de comunicação (uma ligação) que descreve como as mensagens devem ser enviadas e uma definição para um conjunto de mensagens que podem ser enviadas ou recebidas (ou ambas) nesse local (um contrato de serviço) que descreve qual mensagem pode ser enviada.

Um serviço WCF é exposto ao mundo como uma coleção de pontos de extremidade.

Ponto de extremidade do aplicativo
Um ponto de extremidade exposto pelo aplicativo e que corresponde a um contrato de serviço implementado pelo aplicativo.

Ponto final de infraestrutura
Um ponto de extremidade exposto pela infraestrutura para facilitar a funcionalidade necessária ou fornecida pelo serviço que não está relacionado a um contrato de serviço. Por exemplo, um serviço pode ter um ponto de extremidade de infraestrutura que fornece informações de metadados.

Endereço
Especifica o local onde as mensagens são recebidas. É especificado como um URI (Uniform Resource Identifier). A parte do esquema URI nomeia o mecanismo de transporte a ser usado para alcançar o endereço, como HTTP e TCP. A parte hierárquica do URI contém um local exclusivo cujo formato depende do mecanismo de transporte.

O endereço do ponto de extremidade permite que você crie endereços de ponto de extremidade exclusivos para cada ponto de extremidade em um serviço ou, sob certas condições, compartilhe um endereço entre pontos de extremidade. O exemplo a seguir mostra um endereço usando o protocolo HTTPS com uma porta não padrão:

HTTPS://cohowinery:8005/ServiceModelSamples/CalculatorService

Vinculação
Define como um ponto de extremidade se comunica com o mundo. É construído a partir de um conjunto de componentes chamados elementos de ligação que "empilham" um em cima do outro para criar a infraestrutura de comunicação. No mínimo, uma associação define o transporte (como HTTP ou TCP) e a codificação que está sendo usada (como texto ou binário). Uma associação pode conter elementos de vinculação que especificam detalhes como os mecanismos de segurança usados para proteger mensagens ou o padrão de mensagem usado por um ponto de extremidade. Para obter mais informações, consulte Configurando serviços.

Elemento de ligação
Representa uma parte específica da ligação, como um transporte, uma codificação, uma implementação de um protocolo de nível de infraestrutura (como WS-ReliableMessaging) ou qualquer outro componente da pilha de comunicação.

Comportamentos
Um componente que controla vários aspetos de tempo de execução de um serviço, um ponto de extremidade, uma operação específica ou um cliente. Os comportamentos são agrupados de acordo com o escopo: comportamentos comuns afetam todos os pontos de extremidade globalmente, comportamentos de serviço afetam apenas aspetos relacionados ao serviço, comportamentos de ponto de extremidade afetam apenas propriedades relacionadas ao ponto de extremidade e comportamentos de nível de operação afetam operações específicas. Por exemplo, um comportamento de serviço é a limitação, que especifica como um serviço reage quando um excesso de mensagens ameaça sobrecarregar seus recursos de manipulação. Um comportamento de ponto de extremidade, por outro lado, controla apenas aspetos relevantes para pontos de extremidade, como como e onde encontrar uma credencial de segurança.

Ligações fornecidas pelo sistema
O WCF inclui várias ligações fornecidas pelo sistema. Estas são coleções de elementos de ligação que são otimizados para cenários específicos. Por exemplo, o WSHttpBinding é projetado para interoperabilidade com serviços que implementam várias especificações WS-*. Essas associações predefinidas economizam tempo apresentando apenas as opções que podem ser aplicadas corretamente ao cenário específico. Se uma associação predefinida não atender aos seus requisitos, você poderá criar sua própria associação personalizada.

Configuração versus codificação
O controlo de uma aplicação pode ser feito através de codificação, através da configuração ou através de uma combinação de ambos. A configuração tem a vantagem de permitir que alguém que não seja o desenvolvedor (por exemplo, um administrador de rede) defina parâmetros de cliente e serviço depois que o código é escrito e sem ter que recompilar. A configuração não só permite que você defina valores como endereços de ponto de extremidade, mas também permite um controle adicional, permitindo que você adicione pontos de extremidade, associações e comportamentos. A codificação permite que o desenvolvedor mantenha um controle estrito sobre todos os componentes do serviço ou cliente, e quaisquer configurações feitas através da configuração podem ser inspecionadas e, se necessário, substituídas pelo código.

Operação de serviço
Um procedimento definido no código de um serviço que implementa a funcionalidade de uma operação. Esta operação é exposta aos clientes como métodos em um cliente WCF. O método pode retornar um valor e pode aceitar um número opcional de argumentos, ou não aceitar argumentos, e não retornar nenhuma resposta. Por exemplo, uma operação que funciona como um simples "Olá" pode ser usada como uma notificação da presença de um cliente e para iniciar uma série de operações.

Contrato de prestação de serviços
Reúne várias operações relacionadas numa única unidade funcional. O contrato pode definir configurações de nível de serviço, como o namespace do serviço, um contrato de retorno de chamada correspondente e outras configurações semelhantes. Na maioria dos casos, o contrato é definido através da criação de uma interface na linguagem de programação de sua escolha e da aplicação do ServiceContractAttribute atributo à interface. O código de serviço real resulta da implementação da interface.

Contrato de exploração
Um contrato de operação define os parâmetros e o tipo de retorno de uma operação. Ao criar uma interface que define o contrato de serviço, você indica um contrato de operação aplicando o OperationContractAttribute atributo a cada definição de método que faz parte do contrato. As operações podem ser modeladas como pegar uma única mensagem e retornar uma única mensagem, ou como pegar um conjunto de tipos e retornar um tipo. Neste último caso, o sistema determinará o formato das mensagens que precisam ser trocadas para essa operação.

Contrato de mensagem
Descreve o formato de uma mensagem. Por exemplo, ele declara se os elementos da mensagem devem ir em cabeçalhos versus o corpo, que nível de segurança deve ser aplicado a quais elementos da mensagem e assim por diante.

Contrato de culpa
Pode ser associado a uma operação de serviço para indicar erros que podem ser retornados ao chamador. Uma operação pode ter zero ou mais falhas associadas a ela. Esses erros são falhas SOAP que são modeladas como exceções no modelo de programação.

Contrato de dados
As descrições em metadados dos tipos de dados que um serviço usa. Isso permite que outras pessoas interoperem com o serviço. Os tipos de dados podem ser usados em qualquer parte de uma mensagem, por exemplo, como parâmetros ou tipos de retorno. Se o serviço estiver usando apenas tipos simples, não há necessidade de usar explicitamente contratos de dados.

Alojamento
Um serviço deve ser hospedado em algum processo. Um host é um aplicativo que controla o tempo de vida do serviço. Os serviços podem ser auto-hospedados ou gerenciados por um processo de hospedagem existente.

Serviço auto-hospedado
Um serviço que é executado dentro de um aplicativo de processo que o desenvolvedor criou. O desenvolvedor controla seu tempo de vida, define as propriedades do serviço, abre o serviço (o que o define em um modo de escuta) e fecha o serviço.

Processo de hospedagem
Um aplicativo projetado para hospedar serviços. Estes incluem os Serviços de Informação Internet (IIS), os Serviços de Ativação do Windows (WAS) e os Serviços do Windows. Nesses cenários hospedados, o host controla o tempo de vida do serviço. Por exemplo, usando o IIS, você pode configurar um diretório virtual que contenha o assembly de serviço e o arquivo de configuração. Quando uma mensagem é recebida, o IIS inicia o serviço e controla seu tempo de vida.

Instanciação
Um serviço tem um modelo de instanciação. Existem três modelos de instanciação: "single", no qual um único objeto CLR atende a todos os clientes; " per call", no qual um novo objeto CLR é criado para lidar com cada chamada de cliente; e "por sessão", no qual um conjunto de objetos CLR é criado, um para cada sessão separada. A escolha de um modelo de instanciação depende dos requisitos do aplicativo e do padrão de uso esperado do serviço.

Aplicação cliente
Um programa que troca mensagens com um ou mais pontos de extremidade. O aplicativo cliente começa criando uma instância de um cliente WCF e chamando métodos do cliente WCF. É importante notar que um único aplicativo pode ser tanto um cliente quanto um serviço.

Canal
Uma implementação concreta de um elemento vinculativo. A associação representa a configuração e o canal é a implementação associada a essa configuração. Portanto, há um canal associado a cada elemento de ligação. Os canais se empilham uns sobre os outros para criar a implementação concreta da ligação: a pilha de canais.

Cliente WCF
Uma construção cliente-aplicativo que expõe as operações de serviço como métodos (na linguagem de programação .NET Framework de sua escolha, como Visual Basic ou Visual C#). Qualquer aplicativo pode hospedar um cliente WCF, incluindo um aplicativo que hospeda um serviço. Portanto, é possível criar um serviço que inclua clientes WCF de outros serviços.

Um cliente WCF pode ser gerado automaticamente usando a ServiceModel Metadata Utility Tool (Svcutil.exe) e apontando-o para um serviço em execução que publica metadados.

Metadados
Em um serviço, descreve as características do serviço que uma entidade externa precisa entender para se comunicar com o serviço. Os metadados podem ser consumidos pela ServiceModel Metadata Utility Tool (Svcutil.exe) para gerar um cliente WCF e a configuração que acompanha que um aplicativo cliente pode usar para interagir com o serviço.

Os metadados expostos pelo serviço incluem documentos de esquema XML, que definem o contrato de dados do serviço, e documentos WSDL, que descrevem os métodos do serviço.

Quando habilitado, os metadados do serviço são gerados automaticamente pelo WCF inspecionando o serviço e seus pontos de extremidade. Para publicar metadados de um serviço, você deve habilitar explicitamente o comportamento de metadados.

Segurança
No WCF, inclui confidencialidade (criptografia de mensagens para evitar escutas), integridade (o meio para deteção de adulteração da mensagem), autenticação (o meio para validação de servidores e clientes) e autorização (o controle de acesso aos recursos). Essas funções são fornecidas aproveitando os mecanismos de segurança existentes, como TLS sobre HTTP (também conhecido como HTTPS), ou implementando uma ou mais das várias especificações de segurança WS-*.

Modo de segurança de transporte
Especifica que a confidencialidade, a integridade e a autenticação são fornecidas pelos mecanismos da camada de transporte (como HTTPS). Ao utilizar um transporte como o HTTPS, este modo tem a vantagem de ser eficiente no seu desempenho, e bem compreendido devido à sua prevalência na Internet. A desvantagem é que esse tipo de segurança é aplicado separadamente em cada salto no caminho de comunicação, tornando a comunicação suscetível a um ataque "man in the middle".

Modo de segurança da mensagem
Especifica que a segurança é fornecida implementando uma ou mais das especificações de segurança, como a especificação chamada Web Services Security: SOAP Message Security. Cada mensagem contém os mecanismos necessários para fornecer segurança durante o seu trânsito e para permitir que os recetores detetem adulterações e descriptografem as mensagens. Nesse sentido, a segurança é encapsulada em cada mensagem, fornecendo segurança de ponta a ponta em vários saltos. Como as informações de segurança se tornam parte da mensagem, também é possível incluir vários tipos de credenciais com a mensagem (essas são chamadas de declarações). Essa abordagem também tem a vantagem de permitir que a mensagem viaje com segurança em qualquer transporte, incluindo vários transportes entre sua origem e destino. A desvantagem desta abordagem é a complexidade dos mecanismos criptográficos utilizados, resultando em implicações no desempenho.

Transporte com modo de segurança de credencial de mensagem
Especifica o uso da camada de transporte para fornecer confidencialidade, autenticação e integridade das mensagens, enquanto cada uma das mensagens pode conter várias credenciais (declarações) exigidas pelos destinatários da mensagem.

WS-*
Abreviação para o crescente conjunto de especificações de serviço Web (WS), como WS-Security, WS-ReliableMessaging e assim por diante, que são implementadas no WCF.

Consulte também