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 instrução sobre um conjunto de mensagens específicas organizadas em padrões 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, uma operação Hello deve obviamente aceitar uma mensagem (para que o chamador 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 Visão geral do cliente WCF. Para obter mais informações sobre canais de cliente, arquitetura do cliente e outros problemas do 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 da criação e implementação. Antes de criar e implementar seu aplicativo WCF, é recomendável que você:

  • Entenda o que é um contrato de serviço, como ele funciona e como criá-lo.

  • Entenda que os contratos declaram requisitos mínimos aos quais a configuração de tempo de execução ou o ambiente de hospedagem podem não dar suporte.

Contratos de serviço

Um contrato de serviço é uma instruçã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 operação CreateOrder 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 operação GetOrderStatus 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ária para processar com êxito as mensagens. 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 dos 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 a linguagem da especificação quanto porque essas linguagens 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 trata 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 linguagens para descrever os serviços de forma acessível, eles são linguagens difíceis de usar diretamente — em qualquer caso, são apenas descrições de um serviço e 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 chamado de exportado) como metadados, WSDL e XSD, quando necessário, por 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 a 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 contratos de dados, consulte Criar contratos de serviço. Para obter mais informações sobre a implementação de contratos, consulte Implementar 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 Usar contratos de mensagem. Para obter mais informações sobre o desenvolvimento de 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 em tempo de execução 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, mas, apenas que eles devem ser atendidos. O tipo de criptografia ou como uma mensagem é inserida depende da implementação e da configuração de um serviço conforme.

Observe a forma como o contrato exige certas coisas da implementação do contrato de serviço e da configuração de tempo de execução para adicionar comportamento. O conjunto de requisitos que deve ser atendido para expor um serviço para compilações de uso no conjunto anterior de requisitos. Se um contrato fizer requisitos da implementação, uma implementação poderá exigir ainda mais da configuração e das associações que permitem que o serviço seja executado. 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.

É importante ter em mente esse processo de requisito aditivo durante a criação, implementação, configuração e hospedagem do 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 do Windows Integrado e estiver hospedado no IIS (Serviços de Informações da Internet), o aplicativo Web no qual o serviço reside deve ter o autenticação do Windows integrado ativado 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.

Confira também