Projetando e implementando serviços

Esta seção mostra como definir e implementar contratos WCF. Um contrato de serviço especifica o que um ponto de extremidade comunica com o mundo exterior. Em um nível mais concreto, é uma declaraçã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 é um conjunto logicamente relacionado de trocas de mensagens, uma operação de serviço é uma única troca de mensagens. Por exemplo, uma Hello operação 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 principais do Windows Communication Foundation (WCF), consulte Conceitos fundamentais do Windows Communication Foundation. Este tópico concentra-se na compreensão dos contratos de serviços. Para obter mais informações sobre como criar clientes que usam contratos de serviço para se conectar a serviços, consulte Visão geral do cliente WCF.

Descriçã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 do design e da implementação. Antes de projetar e implementar seu aplicativo WCF, é recomendável que você:

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

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

Contratos de Serviços

Um contrato de serviço especifica o seguinte:

  • As operações que um contrato expõe.

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

  • Os tipos de dados dessas mensagens.

  • A localização das operações.

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

Por exemplo, um contrato de ordem de compra pode ter uma CreateOrder operação que aceita uma entrada de tipos de informações de ordem e retorna informações de sucesso ou falha, incluindo um identificador de ordem. 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 prestação de serviços deste tipo especificaria:

  1. Que o contrato de ordem de compra consistia em CreateOrder e GetOrderStatus operações.

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

  3. Os dados que essas mensagens podem carregar.

  4. Afirmações categóricas sobre a infraestrutura de comunicação necessária para processar com sucesso 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 este tipo de informação a outras aplicações em muitas plataformas (incluindo plataformas que não sejam da Microsoft), os contratos de serviço XML são publicamente expressos em formatos XML padrão, tais como Web Services Description Language (WSDL) e XML Schema (XSD), entre outros. Os desenvolvedores de muitas plataformas podem usar essas informações de contrato público para criar aplicativos que podem se comunicar com o serviço, tanto porque entendem a linguagem da especificação quanto porque essas linguagens são projetadas para permitir a interoperação, descrevendo os formulários, formatos e protocolos públicos suportados pelo serviço. Para obter mais informações sobre como o WCF lida com esse tipo de informação, consulte Metadados.

Os contratos podem ser expressos de muitas maneiras e, embora WSDL e XSD sejam excelentes linguagens para descrever serviços de forma acessível, são linguagens difíceis de usar diretamente e são meramente descrições de um serviço, não implementações de contratos de serviços. Portanto, os aplicativos WCF usam atributos, interfaces e classes gerenciadas para definir a estrutura de um serviço e implementá-lo.

O contrato resultante definido em tipos gerenciados pode ser exportado como metadados — WSDL e XSD — quando necessário por clientes ou outros implementadores de serviços. 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, as informações relacionadas ao transporte e à segurança, e assim por diante, podem ser deixados para o WCF, que executa as conversões necessárias de e para o sistema de tipo de contrato de serviço para o sistema de tipo XML automaticamente.

Para obter mais informações sobre como projetar contratos, consulte Projetando contratos de serviço. Para obter mais informações sobre como implementar contratos, consulte Implementando contratos de serviços.

Mensagens na frente e no centro

O uso de interfaces, classes e métodos gerenciados para modelar operações de serviço é simples quando você está acostumado a assinaturas de método no estilo RPC (chamada de procedimento remoto), nas quais passar parâmetros para um método e receber valores de retorno é a forma normal de solicitar funcionalidade de um objeto ou outro tipo de código. Por exemplo, programadores usando linguagens gerenciadas como Visual Basic e C++ COM podem aplicar seus conhecimentos da abordagem de estilo RPC (seja usando objetos ou interfaces) para a criação de contratos de serviço WCF sem experimentar os problemas inerentes aos sistemas de objetos distribuídos no estilo RPC. A orientação a serviços fornece os benefícios da programação orientada a mensagens fracamente acoplada, mantendo a facilidade e familiaridade da experiência de programação RPC.

Muitos programadores estão mais confortáveis com interfaces de programação de aplicativos orientadas a mensagens, como filas de mensagens como o Microsoft MSMQ, os System.Messaging namespaces no .NET Framework ou o envio de XML não estruturado em solicitações HTTP, para citar alguns. Para obter mais informações sobre programação no nível da mensagem, consulte Usando contratos de mensagem, programação no nível do canal de serviço e interoperabilidade com aplicativos POX.

Entendendo a hierarquia de requisitos

Um contrato de prestação de serviços agrupa as operações; especifica o padrão de troca de mensagens, os tipos de mensagens 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 próprio contrato de prestação de serviços não especifica com precisão a forma como esses requisitos são cumpridos, apenas que devem sê-lo. O tipo de criptografia ou a maneira como uma mensagem é assinada depende da implementação e configuração de um serviço compatível.

Observe a maneira 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 devem ser atendidos 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 pode exigir ainda mais da configuração e das associações que permitem que o serviço seja executado. Finalmente, o aplicativo host também deve oferecer suporte a quaisquer requisitos que a configuração de serviço e as associações adicionem.

Esse processo de requisito aditivo é importante ter em mente ao projetar, implementar, configurar e hospedar um aplicativo de serviço WCF (Windows Communication Foundation). Por exemplo, o contrato pode especificar que precisa dar suporte a uma sessão. Em caso afirmativo, 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 seu serviço exigir a 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 aplicativos de host de serviço, consulte Serviços de hospedagem.

Consulte também