Compartilhar via


Contratos

Esta seção mostra como definir e implementar contratos do WCF (Windows Communication Foundation). Um contrato de serviço especifica o que um ponto de extremidade comunica ao mundo externo. Em um nível mais concreto, é uma declaração sobre um conjunto de mensagens específicas organizadas em modelos básicos de troca de mensagens (MEPs), como solicitação/resposta, unidirecional e duplex. Se um contrato de serviço for um conjunto logicamente relacionado de trocas de mensagens, uma operação de serviço será uma única troca de mensagens. Por exemplo, a operação Hello deve obviamente aceitar uma mensagem (para que quem chama possa anunciar a saudação) e pode ou não retornar uma mensagem (dependendo da cortesia da operação).

Para obter mais informações sobre contratos e outros conceitos básicos do WCF, consulte conceitos fundamentais do Windows Communication Foundation. Este tópico se concentra na compreensão dos contratos de serviço. Para obter mais informações sobre como criar clientes que usam contratos de serviço para se conectar aos serviços, consulte a Visão geral do cliente do WCF. Para obter mais informações sobre canais de cliente, a arquitetura do cliente e outros problemas de cliente, consulte Clientes.

Visão geral

Este tópico fornece uma orientação conceitual de alto nível para projetar e implementar serviços WCF. Os subtópicos fornecem informações mais detalhadas sobre as especificidades de criação e implementação. Antes de projetar e implementar seu aplicativo WCF, é recomendável que você:

  • Entenda o que é um contrato de serviço, como ele funciona e como criar um.

  • Entenda que os contratos estipulam requisitos mínimos que a configuração em tempo de execução ou o ambiente de hospedagem podem não suportar.

Contratos de Serviço

Um contrato de serviço é uma declaração que fornece informações sobre:

  • O agrupamento de operações em um serviço.

  • A assinatura de operações em termos de mensagens trocadas.

  • Os tipos de dados dessas mensagens.

  • O local das operações.

  • Os protocolos específicos e os formatos de serialização usados para dar suporte à comunicação bem-sucedida com o serviço.

Por exemplo, um contrato de pedido de compra pode ter uma CreateOrder operação que aceita uma entrada de tipos de informações de pedido e retorna informações de êxito ou falha, incluindo um identificador de pedido. Ele também pode ter uma GetOrderStatus operação que aceita um identificador de pedido e retorna informações de status do pedido. Um contrato de serviço desse tipo especificaria:

  • Que o contrato de ordem de compra consistia nas operações CreateOrder e GetOrderStatus.

  • Que as operações especificaram mensagens de entrada e mensagens de saída.

  • Os dados que essas mensagens podem carregar.

  • Instruções categóricas sobre a infraestrutura de comunicação necessárias para processar as mensagens com êxito. Por exemplo, esses detalhes incluem se e quais formas de segurança são necessárias para estabelecer uma comunicação bem-sucedida.

Para transmitir esse tipo de informação para aplicativos em outras plataformas (incluindo plataformas não Microsoft), os contratos de serviço XML são expressos publicamente em formatos XML padrão, como WSDL (Linguagem de Descrição de Serviços Web) e Esquema XML (XSD), entre outros. Os desenvolvedores de muitas plataformas podem usar essas informações de contrato público para criar aplicativos que possam se comunicar com o serviço, tanto porque entendem o idioma da especificação quanto porque esses idiomas foram projetados para habilitar a interoperação descrevendo os formulários públicos, formatos e protocolos aos quais o serviço dá suporte. Para obter mais informações sobre como o WCF lida com esse tipo de informação, consulte Metadados.

No entanto, os contratos podem ser expressos de várias maneiras e, embora o WSDL e o XSD sejam excelentes idiomas para descrever os serviços de maneira acessível, eles são idiomas difíceis de usar diretamente, em qualquer caso, são meramente descrições de um serviço, não implementações de contrato de serviço. Portanto, os aplicativos WCF usam atributos gerenciados, interfaces e classes para definir a estrutura e implementar um serviço.

O contrato resultante definido em tipos gerenciados pode ser convertido (também conhecido como exportado) como metadados — WSDL e XSD — quando necessário para clientes ou outros implementadores de serviço, especialmente em outras plataformas. O resultado é um modelo de programação simples que pode ser descrito usando metadados públicos para qualquer aplicativo cliente. Os detalhes das mensagens SOAP subjacentes, como as informações relacionadas ao transporte e à segurança, podem ser deixados para o WCF, que executa automaticamente as conversões necessárias de e para o sistema de tipo de contrato de serviço para o sistema de tipos XML.

Para obter mais informações sobre a criação de contratos, consulte Designing Service Contracts. Para obter mais informações sobre como implementar contratos, consulte Implementando contratos de serviço.

Além disso, o WCF também fornece a capacidade de desenvolver contratos de serviço inteiramente no nível da mensagem. Para obter mais informações sobre como desenvolver contratos de serviço no nível da mensagem, consulte Usando contratos de mensagem. Para obter mais informações sobre como desenvolver serviços em XML não SOAP, consulte Interoperabilidade com aplicativos POX.

Noções básicas sobre a hierarquia de requisitos

Um contrato de serviço agrupa as operações; especifica o MEP, os tipos de mensagem e os tipos de dados que essas mensagens carregam; e indica categorias de comportamento de runtime que uma implementação deve ter para dar suporte ao contrato (por exemplo, pode exigir que as mensagens sejam criptografadas e assinadas). O contrato de serviço em si, no entanto, não especifica precisamente como esses requisitos são atendidos, apenas que eles devem ser. Que tipo de criptografia ou como uma mensagem é assinada está em conformidade com a implementação e a configuração de um serviço em conformidade.

Observe a maneira como o contrato requer determinados itens da implementação do contrato de serviço e da configuração de runtime para adicionar comportamento. O conjunto de requisitos que deve ser atendido para expor um serviço para uso baseia-se no conjunto de requisitos anterior. Se um contrato fizer requisitos da implementação, uma implementação poderá exigir ainda mais da configuração e das associações que permitem a execução do serviço. Por fim, o aplicativo host também deve dar suporte a todos os requisitos que a configuração de serviço e as associações adicionam.

Esse processo de requisito aditivo é importante ter em mente ao projetar, implementar, configurar e hospedar seu aplicativo de serviço WCF (Windows Communication Foundation). Por exemplo, o contrato pode especificar que ele precisa dar suporte a uma sessão. Nesse caso, você deve configurar a associação para dar suporte a esse requisito contratual ou a implementação do serviço não funcionará. Ou se o serviço exigir autenticação integrada do Windows e estiver hospedado no IIS (Serviços de Informações da Internet), o aplicativo Web no qual o serviço reside deverá ter a autenticação integrada do Windows ativada e o suporte anônimo desativado. Para obter mais informações sobre os recursos e o impacto dos diferentes tipos de aplicativo host de serviço, consulte Hospedagem.

Consulte também