O artigo trata dos conceitos básicos
para a criação de serviços WCF (Windows Communication Foundation). Este é um
conjunto de bibliotecas do Framework .Net que representa a API necessária para
criação de aplicações orientadas a serviços que servem para intercâmbio de
dados entre aplicações locais, em uma intranet ou remotas. Em
que situação o tema é útil Aplicações orientadas a serviços
permitem a troca de mensagens entre programas diferentes usando protocolos
padronizados para realizar este trabalho. Os recursos do WCF facilitam o
desenvolvimento destes serviços e principalmente, dão maior flexibilidade
graças às facilidades de implementação oferecidas pelo Framework .Net. É útil em
casos onde for necessário fazer a comunicação entre aplicações promovendo troca
de dados e processamento distribuído, e no desenvolvimento de aplicações mais
complexas que seja conveniente separar o processamento em máquinas diferentes.
Um serviço WCF pode trabalhar em conjunto com um servidor de bancos de dados
para realizar tratamento em dados que devem ser enviados para um site ou uma
aplicação ERP na geração de relatórios, análises de dados, entre outros
exemplos. Introdução ao WCF Aplicações precisam
consumir dados e estes, precisam ser tratados antes de serem exibidos. Nem
sempre o software que apresenta as informações tem capacidade para
armazenamento e processamento necessários. As aplicações orientadas a serviços
entram neste cenário permitindo que equipamentos com recursos limitados de
armazenamento ou de processamento consigam ser usados para pelo menos fazer a
exibição dos dados. Existem muitas formas de
fazer troca de dados entre aplicações inclusive de maneira distribuída. Uma
alternativa a ser considerada é usar o conjunto de bibliotecas do Framework
.Net conhecido como Windows Communication Foundation (WCF). A inclusão do WCF
se deu no Framework .Net a partir da versão 3.0 e desde então vem sendo aperfeiçoado
a cada atualização. Seus recursos dão uma
estrutura clara e bem definida para a criação de serviços de distribuição de
dados e serviços fazendo distinção entre quais os dados a serem trafegados,
quais operações estão disponíveis e quais as formas que estes serviços poderão
ser distribuídos. Um serviço tende a se
tornar complexo conforme as funcionalidades que se deseja expor. Rapidamente o
desenvolvedor se vê lidando com inúmeras questões de arquitetura, protocolos e
segurança. Este artigo procura dar
uma introdução ao mesmo tempo simples e consistente para os que desejarem
começar a conhecer e utilizar mais este recurso partindo praticamente do zero. Com alguns passos é
esperado mostrar uma alternativa para aqueles que quiserem começar a produzir
rapidamente. Para os que estão
acostumados com Web Services, são feitas comparações e comparações entre estes
e o WCF.
Comunicação entre programas
Atualmente a palavra que define as aplicações de software é conectividade. Quanto mais conectada uma aplicação estiver maiores são as chances de tornar-se popular e consequentemente, atrair um número maior de usuários (o que obviamente, espera-se, traga mais retorno financeiro para o seu desenvolvedor).
Há disponibilidade de meios para troca de dados como não havia antes. Redes coorporativas com e sem fio. Internet. Rede de celulares de alta velocidade. Estas são as mais populares e muitos dos dispositivos as usam frequentemente.
Muitas também são as formas de fazer troca de dados nestes meios o que traz alguns problemas para os desenvolvedores. Inicialmente é preciso definir qual protocolo será usado para comunicação. Os principais são o TCP e HTTP, sendo que o primeiro mais comum em redes corporativas (internas) e o segundo para a Internet quando está se tratando de comunicação de dados entre aplicações. O passo seguinte é definir um formato a ser usado para envio e recepção de dados. O mais comum é a troca de mensagens entre aplicação provedora do serviço (que pode ser chamada de host) e a aplicação que vai usar ou consumir este, também chamada de aplicação Client.
Muitas tecnologias de troca de dados foram desenvolvidas, cada uma dentro de um contexto específico tais como: Component Object Model (COM) e Distributed Component Object Model (DCOM); Remote Method Invocation (RMI), Microsoft Message Queuing (MSMQ) e WebSphere Message Queuing, sendo que nenhuma destas pode ser usada com bons resultados em diversos cenários.
O WCF foi feito para ser usado em qualquer cenário onde o Framework .Net possa fazer troca de dados com outro software e assim, oferecer um leque maior de situações onde possa ser aplicado. Existem grandes chances desta ser a melhor opção para solução de problemas com comunicação de dados principalmente pela facilidade de desenvolvimento proporcionada pela tecnologia e também pelo desempenho melhor em muitos casos.
Basicamente o WCF consiste de um conjunto de bibliotecas e classes adicionadas ao Framework na versão 3.0. De fato, a diferença principal da versão 2.0 para esta foi a adição deste recurso mais as tecnologias WPF (Windows Presentation Foundation) e WWF (Windows Workflow Foundation).
Para desenvolvedores já acostumados com o Framework .Net o WCF representa uma evolução natural de outro recurso – os Web Services. Estes já foram assunto de artigos anteriores e constituem uma plataforma baseada em uma arquitetura aberta que se popularizou graças a padrões como o protocolo HTTP para a camada de comunicação e o XML como formato de envio e recepção de dados.
Os Web Services foram largamente usados pelas aplicações baseadas no Framework .Net entretanto, recentemente estão cedendo espaço para o WCF e é preciso entender os motivos.
Diferenças entre WCF e Webservices
Este artigo surgiu da necessidade em demonstrar a mais nova tecnologia da Microsoft para disponibilização de serviços pelas redes e que é uma evolução dos Web Services.
Ao criar um projeto novo no Visual Studio 2010 e selecionar a versão 4.0 do Framework não está mais disponível a criação de aplicações do tipo Web Services. A Figura 1 demonstra uma tela para criação de projetos no Framework 3.0 onde este tipo de aplicação ainda está presente. Ao mudar a versão do Framework este tipo não está mais disponível. Confira na Figura 2.
Figura 1. Criação de Web Services com o Framework 3.0
Figura 2. Criação de projeto com o a versão 4 do Framework .Net
Independente do que isto possa significar, as vantagens de se usar um projeto WCF em vez de Web Service recaem principalmente quando se pretende usar os mais novos recursos do Framework 4.0 como classes anônimas e parâmetros nomeados, por exemplo, sem precisar importar bibliotecas de terceiros.
Serviços WCF também usam o padrão de documentos XML para intercâmbio de dados, devidamente configurados também oferecem toda a infraestrutura dos Web Services como o endereço UDDI e o documento WSDL para descrever o serviço.
Além disto, é possível fazer o host (manter o serviço em execução) de várias formas e não apenas usando um servidor dedicado para isto (como é o caso dos Web Services que precisam do IIS dentro da plataforma Windows).
O desenvolvimento de um projeto WCF é mais claro e ainda que o Visual Studio possua modelos para serem usados, é possível fazer sua construção a partir do zero. Isto traz impacto positivo deixando o programa mais leve, mais claro para o desenvolvedor compreender, uma vez que, somente os elementos realmente necessários serão adicionados para a aplicação.
Ciclo básico para desenvolver WCF
A criação de uma aplicação WCF baseia-se em alguns passos para sua perfeita implementação. Em linhas gerais os passos são:
1. Definição do contrato de serviço que especifica os dados e operações que podem ser consumidos. Isto é feito via definição de uma interface;
2. Implementar o contrato escrevendo o código criando a classe a partir da interface definida;
3. Configurar o serviço especificando os endereços através dos quais o mesmo pode ser acessado. É nesta fase que se define se o serviço pode ser acessado via protocolo HTTP ou TCP ou ainda, via Windows Service;
4. Publicar o serviço tornando-o disponível para o acesso através das aplicações cliente;
5. Criar a aplicação Client que vai consumir o WCF referenciando o serviço e criando a classe Proxy responsável pela comunicação com o mesmo.
Como se pode perceber, diferentemente dos Web Services, este tipo de projeto precisa de um conhecimento um pouco mais elevado dos recursos do Framework .Net, mas, nada de se preocupar.
Vou demonstrar estas etapas sucintamente e para quem esteja pretendendo rever os conceitos do Framework que serão usados, segue uma pequena lista destes:
O contrato
É o elemento que determina todas as operações que o serviço vai executar. O contrato é definido por uma interface. Para transformar uma interface em um serviço, são necessários atributos específicos ao WCF. Estes atributos são marcações da linguagem C# colocados sobre elementos do programa entre colchetes.
Um serviço tem basicamente dois tipos de contrato: um de serviço, chamado de ServiceContract e um de disponibilização de dados chamado de DataContract. Para criar uma interface que será usada como ServiceContract é necessário primeiro adicionar uma referência a System.ServiceModel e System.Runtime.Serialization. Em seguida, sobre a declaração da interface deve se decorar a interface com o atributo:
...