|
Artigo Técnico:Visão geral do WCF – (Windows Communication Foundation)
Autor: Adriano Luciano Candido - Colaborador MCP Brasil.com
12/08/2008 - Definição: O Windows Communication Foundation, mais conhecido como WCF, representa um conjunto de tecnologias .NET para construir e executar sistemas conectados, conforme definição da própria Microsoft. É uma infraestrutura de comuniçação de aplicação que foi construída com base na arquitetura dos Web Services, sendo projetada para construir aplicações distribuídas no modelo orientado a serviço e sendo apresentada também como a plataforma da Microsoft para o SOA (Service Oriented Architecture) . O WCF consolida um pouco mais a evolução da programação como temos vivido nos últimos tempos, onde antes utilizamos várias tecnologias distintas para satisfazer diferentes cenários de aplicações distribuídas como COM+, Remoting, WSE (Web Service Enhancemnts), Web Service e Messaging, sendo que o WCF visa consolidar todas estas tecnologias, se apresentando como a evolução destas, afim de tratar cenários de aplicações distribuídas de forma mais simples, mais objetiva e em um modelo unificado. A vantagem disto tudo, é que cada vez mais gastaremos menos tempo com as decisões de implementação técnica em si e aplicaremos mais tempo na solução de business. Porém, isto não indica que não precisamos mais definir uma solução técnica, significa apenas que com um modelo unficado ficará mais facil trabalhar na implementação da solução. Apenas uma consideração: a definição para os conceitos de design do SOA é independente de tecnologia e visa criar serviços direcionados no negócio, permitindo a utilização destes serviços sem qualquer conhecimento da implementação destes. Em resumo, não basta apenas eu publicar um web service na internet ou intranet para dizer que tenho uma aplicação totalmente aderente ao SOA, já que esta arquitetura é muito mais abragente do que parece, portanto tenha cuidado.  Arquitetura Geral: A concepção da solução de negocio dentro do WCF se encontra na forma de serviços, onde a estrutura destes serviços é composta de : - Host (Service Host): Fornece o ambiente onde o serviço WCF é executado.
- Contrato (Service Contract): É uma interface que define as operações definindo como o processo de comunicação troca mensagens.
- Classes do .NET Framework: Permite usar alguns atributos do WCF para determinar características do serviço como sessões, tempo de vida, entre outros.
As aplicações clientes enviam mensagens e recebem respostas através de endpoints que conectam nos serviços WCF, normalmente o cliente usa um objeto proxy que esconde a complexidade do canal de comunicação e faz o serviço remoto parecer um componente local. Este tipo de recurso sempre foi muito utilizado na chamada dos XML Web Services do .NET. O serviço do WCF utiliza um objeto dispatcher para converter as mensagens recebidas do cliente em chamadas de métodos do serviço. Um serviço WCF pode esperar por mensagens (chamadas) em um ou mais endpoints. Para ficar mais simples segue algumas definições: - Um serviço WCF é um programa que expoem diversos endpoints. Cada endpoint é uma forma de comunicação deste serviço com o cliente.
- Um cliente é um programa que troca mensagens com um ou mais endpoints de serviços WCF.
 Um serviço WCF pode ter mais de um endpoint onde, cada um destes endpoints são compostos de três elementos: Address, Binding e Contract. Onde: - Address: Representa o endereço de rede onde o serviço reside, exemplo: http://localhost:8001/PostalService
- Binding: Define como o serviço se comunica com o mundo, incluindo qual o transporte de comunicação (TCP, HTTP, etc), enconding (Texto, binário) e segurança (SSL, SOAP security).
- Contract: Especifica o que o serviço comunica e basicamente é um coleção de mensagens organizadas em operações, ou para ficar mais simples, a interface do serviço.
Portanto imaginem um cenário simplista onde eu tenha que atender a uma necessidade específica de negócio (por exemplo, cálculo de frete, códigos postais, fechamento de pedido de compra, etc) e que a solução será consumida por aplicações clientes síncrona através da WEB e de aplicações assincronas em um ambiente de rede local. Para a solução, poderíamos criar um único serviço WCF que expoem operações para tratar a solução de negócio sem me preocupar fortemente com as necessidades de comunicação das aplicações clientes. Porém na hora de expor este serviço, eu poderia simplesmente criar um endpoint que atenderia requisições em um endereço de internet, através do protocolo HTTP, usando SSL e utilizando minha interface do serviço como contrato. Para as aplicações clientes assincronas eu poderia utilizar um endereço na rede local, usando um binding MSMQ e usando a mesma interface do serviço como contrato.  Desta forma a implementação do serviço poderia ser feita sem se preocupar exclusivamente com o cenário de comunicação onde ele será utilizado. É claro que o conhecimento dos cenários é importante no momento da implentação, pois algumas questões técnicas podem afetar a forma de distribuição do serviço, como por exemplo os tipos de dados retornados pelas operações, os quais podem ter limitações em alguns protocolos utilizados no binding do endpoint, mas de fato a relevância da comunicação em relação a complexidade de implementação cai bastante. Conclusão Como vimos, a proposta do WCF é bem simplista, muito objetiva e aparentemente efetiva: unificar em um modelo a forma como construímos as soluções de aplicações distribuídas. Vejo que o grande destaque, esta na forma como podemos expor um mesmo serviço de formas diferentes, sem ter que reescreve-los com convenções específicas. Isto irá permitir que os desenvolvedores utilizem a tecnologia da melhor forma possível. A curva de aprendizado para a construção deste tipo de aplicação deve melhorar também, já que não será mais necessário aprender diversas tecnologias para conseguir criar as soluções. Outro ponto a citar é a melhora na produtividade, pois o WCF simplificou muitas das atividades de desenvolvimento para os serviços.
|