Compartilhar via


Conceitos fundamentais do Windows Communication Foundation

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

Conceitos básicos do WCF

O WCF é um runtime 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.

Mensagem e pontos de extremidade

O WCF baseia-se 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 de Enfileiramento de Mensagens (também conhecida como MSMQ) pode ser representada de forma 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 os 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. Endpoints são locais onde mensagens são enviadas ou recebidas (ou ambas) 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 maneira padronizada, para onde as mensagens devem ser enviadas, como elas devem ser enviadas e como as mensagens devem ser formatadas. Um serviço pode expor essas informações como metadados que os clientes podem processar para gerar os 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 por intranets e pela Internet usando transportes comuns, como HTTP e TCP. Estão incluídos outros transportes que dão suporte à comunicação com aplicativos de Enfileiramento de Mensagens e nós em uma malha de rede par. 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 uma determinada mensagem é formatada. O WCF fornece as seguintes codificações:

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

  • Codificação do MTOM (Mecanismo de Otimização de Transmissão de Mensagens), que é uma maneira interoperável de enviar dados binários não estruturados com eficiência de e para um serviço.

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

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

Padrões de mensagem

O WCF dá suporte a vários padrões de mensagens, incluindo solicitação-resposta, comunicação unidirecional e duplex. Transportes diferentes dão suporte a diferentes padrões de mensagens e, portanto, afetam os tipos de interações que eles dão suporte. As APIs do WCF e o runtime 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 autocontida de dados que pode consistir em várias partes, incluindo um corpo e cabeçalhos.

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

Endpoint Um ponto de comunicação no qual as mensagens são enviadas ou recebidas (ou ambas). Ele compreende um local (um endereço) que define onde as mensagens podem ser enviadas, uma especificação do mecanismo de comunicação (uma associaçã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 do WCF é exposto para o 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 de extremidade 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. Ele é especificado como um URI (Uniform Resource Identifier). A parte do esquema de URI nomeia o mecanismo de transporte a ser usado para acessar 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, em determinadas 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 endpoint comunica com o mundo. Ele é construído de um conjunto de componentes chamados elementos de associação que "empilham" um sobre o 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 associaçã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 Binding Representa uma parte específica do binding, 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 aspectos de runtime 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 aspectos relacionados ao serviço, comportamentos de ponto de extremidade afetam apenas propriedades relacionadas ao ponto de extremidade e comportamentos no nível da operação afetam operações específicas. Por exemplo, um comportamento do 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 somente os aspectos que são relevantes para os pontos de extremidade, por exemplo, como e onde localizar uma credencial de segurança.

Associações fornecidas pelo sistema O WCF inclui várias associações fornecidas pelo sistema. São coleções de elementos de associação otimizados para cenários específicos. Por exemplo, 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 controle de um aplicativo pode ser feito por meio da codificação, por meio da configuração ou por meio 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 após a gravação do código e sem precisar recompilar. A configuração não só permite definir 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 todas as configurações feitas por meio 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. Essa operação é exposta a clientes como métodos em um cliente WCF. O método pode retornar um valor e pode usar 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 "Hello" pode ser usada como uma notificação da presença de um cliente e para iniciar uma série de operações.

Contrato de serviço Vincula várias operações relacionadas a uma ú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 desse tipo. Na maioria dos casos, o contrato é definido criando uma interface na linguagem de programação de sua escolha e aplicando o ServiceContractAttribute atributo à interface. O código real do serviço é gerado implementando a interface.

Contrato de operaçã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ê significa 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 por 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, qual nível de segurança deve ser aplicado a quais elementos da mensagem e assim por diante.

Contrato de falha Pode ser associado a uma operação de serviço para denotar 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 nos 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 será necessário usar explicitamente os contratos de dados.

Hospedagem 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 executado em 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 (que o define em um modo de escuta) e fecha o serviço.

Processo de hospedagem Um aplicativo projetado para hospedar serviços. Eles incluem Serviços de Informações da Internet (IIS), Was (Serviços de Ativação do Windows) e 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 contém 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.

Instância Um serviço tem um modelo de instanciação. Há três modelos de instanciação: "single", em que um único objeto CLR atende a todos os clientes; " por chamada", no qual um novo objeto CLR é criado para lidar com cada chamada de cliente; e "por sessão", em que 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.

Aplicativo cliente Um programa que troca mensagens com um ou mais endpoints. O aplicativo cliente começa criando uma instância de um cliente WCF e chamando métodos do cliente WCF. É importante observar que um único aplicativo pode ser um cliente e um serviço.

Canal Uma implementação concreta de um elemento de associação. 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 associação. O canais empilham-se uns sobre os outros para criar a implementação concreta da associação: a pilha do canal.

Cliente WCF Um constructo cliente-aplicativo que expõe as operações de serviço como métodos (na linguagem de programação do .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 Ferramenta de Utilitário de Metadados do ServiceModel (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 acompanhar a configuração 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 ativados, os metadados para o serviço são gerados automaticamente pela inspecionando o serviço e seus pontos de extremidade. Para publicar metadados de um serviço, você deve habilitar explicitamente o comportamento dos metadados.

Segurança No WCF, inclui confidencialidade (criptografia de mensagens para evitar interceptação), integridade (os meios para detecção de adulteração da mensagem), autenticação (os meios para validação de servidores e clientes) e autorização (o controle de acesso aos recursos). Essas funções são fornecidas aproveitando mecanismos de segurança existentes, como TLS via 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 de camada de transporte (como HTTPS). Ao usar um transporte como HTTPS, esse modo tem a vantagem de ser eficiente em 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 de intermediários.

Modo de segurança de mensagem Especifica que a segurança é fornecida implementando uma ou mais das especificações de segurança, como a especificação chamada Segurança dos Serviços Web: Segurança de Mensagens SOAP. Cada mensagem contém os mecanismos necessários para fornecer segurança durante seu trânsito e para permitir que os receptores detectem adulterações e descriptografem as mensagens. Nesse sentido, a segurança é encapsulada dentro de 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 ( elas são conhecidas como declarações). Essa abordagem também tem a vantagem de habilitar a mensagem para viajar com segurança em qualquer transporte, incluindo vários transportes entre sua origem e destino. A desvantagem dessa abordagem é a complexidade dos mecanismos criptográficos empregados, resultando em implicações de desempenho.

Transporte com o 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 receptores da mensagem.

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

Consulte também