Serviços de implantação e projeção
Esta seção mostra como definir e implementar contratos WCF. 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 Windows Communication Foundation (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.
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 design 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 especifica o seguinte:
As operações que um contrato expõe.
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
eGetOrderStatus
.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 outros 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.
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, e 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 de um serviço 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ço. 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 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 automaticamente.
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.
Mensagens na frente e no centro
Usar interfaces gerenciadas, classes e métodos para modelar operações de serviço é simples quando você é usado para assinaturas de método de chamada de procedimento remoto (RPC), nas quais passar parâmetros para um método e receber valores retornados é a forma normal de solicitar funcionalidade de um objeto ou outro tipo de código. Por exemplo, programadores que usam linguagens gerenciadas como Visual Basic e C++ COM podem aplicar seu conhecimento da abordagem de estilo RPC (seja usando objetos ou interfaces) à 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 de serviço fornece os benefícios da programação vagamente acoplada e orientada a mensagens, 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 namespaces System.Messaging 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 de Channel-Level de serviço e interoperabilidade com aplicativos POX.
Noções básicas sobre a hierarquia de requisitos
Um contrato de serviço agrupa as operações, especifica o padrão de troca de mensagens, 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 não especifica precisamente como esses requisitos são atendidos, mas, apenas que eles devem ser atendidos. O tipo de criptografia ou a forma 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 de um 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 deve 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 Serviços de hospedagem.