Contratos
Esta seção mostra como definir e implementar contratos do Windows Communication Foundation (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 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. Para obter mais informações sobre canais de cliente, a arquitetura do cliente e outros problemas do cliente, consulte Clientes.
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 em tempo de execução ou o ambiente de hospedagem podem não suportar.
Contratos de Serviços
Um contrato de serviços é uma declaração que fornece informações sobre:
O agrupamento de operações em um serviço.
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:
Que o contrato de ordem de compra consistia em
CreateOrder
eGetOrderStatus
operações.Que as operações especificaram mensagens de entrada e mensagens de saída.
Os dados que essas mensagens podem carregar.
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 esse tipo de informação a aplicativos em outras plataformas (incluindo plataformas que não sejam da Microsoft), os contratos de serviço XML são publicamente expressos em formatos XML padrão, como WSDL (Web Services Description Language) e XSD (XML Schema), 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.
No entanto, 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 — em qualquer caso, são apenas descrições de um serviço, não implementações de contratos de serviços. 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ços, 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 tipo XML.
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.
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 o desenvolvimento de serviços em XML não-SOAP, consulte Interoperabilidade com aplicativos POX.
Entendendo a hierarquia de requisitos
Um contrato de prestação de serviços agrupa as operações; especifica o MEP, 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, no entanto, não especifica com precisão como esses requisitos são atendidos, apenas que eles devem ser. Que tipo de criptografia ou 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 seu 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 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 de host de serviço, consulte Hospedagem.