Olá,
Noooossa, quanto tempo… Já fazia quase 100 dias que ninguém postava nada aqui hein?!?!, Que coisa feia… rsrsr.
É galera, graças a Deus todos nos estivemos envolvidos em grandes projetos nos últimos meses que exigiam nosso tempo quase que integral e isso deixou nossa comunidade bem desatualizada. Eis que venho aqui quebrar esse jejum de artigos.
E antes de começar o artigo gostaria de parabenizar o Ricardo Machado pois o filho dele Heitor nasceu hoje. Parabéns meu véio, bem vindo ao clube e que deus abençoe voçês. agora vamos lá.
Irei fazer uma breve introdução sobre uma tecnologia que já esta no mercado há três anos, vou falar sobre o Windows Communication Foundation ou WCF para os íntimos.
Bem, como esse artigo é de cunho introdutório, ele terá pouco código, apenas pequenos exemplos tornando a explicação do conceito mais clara. Expondo assim, sua estrutura e conceitos básicos. Segundo o Wikipédia o Windows Communication Foundation é:
“Um modelo de programação unificado e ambiente de execução criado pela Microsoft que visa à construção de aplicações orientadas a serviços cujo objetivo principal é permitir que analistas e desenvolvedores criem aplicações para funcionarem sob o sistema operacional Windows”.
Ou seja, nada mais é do que um Framework para desenvolvimento de sistemas distribuídos que foi lançado como um dos grandes pilares do .NET Framework 3.0 e foi desenvolvido para consolidar e estender as APIs de versões anteriores do Framework. Isso mesmo, essa tecnologia uni e estende as APIs do ASP.NET Web Services, .NET Remoting, Enterprise Services(COM+) e o Message Queue.
O WCF unificou as varias tecnologias de programação distribuída na plataforma da Microsoft em um único modelo, baseando-se na arquitetura orientada a serviço (SOA). Sendo totalmente desacoplado das regras de negócio que serão expostas pelo serviço o WC tornou-se consideravelmente mais fácil de ser desenvolvido e estudado.
Estrutura
A estrutura do WCF não é muito complexa, pois utilizamos conceitos puros de desenvolvimento .NET para criação do contrato e da classe que representara o serviço. O WCF também suporta a utilização de tipos complexos como classes que criamos para atender uma determinada necessidade.
Então você me pergunta: O que é contrato? – o contrato nada mais é do que uma parte do serviço, ou seja, as funcionalidades (Métodos) do serviço que queremos expor para ser consumidos.
O primeiro passo para a criação de um serviço é a definição do ou dos contratos. É o contrato que determinará quais operações estarão expostas, quais informações essas operações precisam para serem executadas e também qual será o tipo de retorno. Em termos programáticos, o contrato nada mais é do que uma Interface que deverá possuir os métodos (apenas suas assinaturas) que serão expostos. Essa interface que servira de contrato obrigatoriamente devera ser decorada com o atributo ServiceContract, caso contrario será gerada uma exceção do tipo InvalidOperationException antes da abertura do Host.
Vale salientar que nem todos os membros expostos pela interface devem ser disponibilizadas para o serviço e justamente por isso todas as operações que serão disponibilizadas devem ser decoradas com o atributo OperationContract, lembrando que o WCF exige termos no mínimo uma operação definida com esse atributo, já que não faz sentido publica um serviço sem nem uma operação a ser executada.
Caso a interface não tenha nenhuma operação definida com este atributo, será gerada uma exceção do tipo InvalidOperationException que também será disparada antes da abertura do Host.
O código abaixo exemplifica uma interface simples:
using System;
using System.ServiceModel;
[ServiceContract]
public interface IContrato
{
[OperationContract]
Produto ListarProdutos(string tipo);
}
Como podemos notar, o método ListarProdutos retorna uma instancia da classe Produto. Nesse momento, entram em ação dois novos atributos: DataContract e DataMember, ambos contidos dentro do namespace System.Runtime.Serialization, fornecidos pelo assenmby System.Runtime.Serialization.dll.
O atributo DataContract determina que uma classe poderá ser exposta através de um serviço WCF, e deve ser aplicado a todas as classes que estão referenciadas como parâmetros ou tipo de retorno em uma Interface(Contrato).
Já o atributo DataMember devera ser aplicado ao campos e propriedades que devem ser expostos através do serviço. Esse atributo controlara a visibilidade do campo ou da propriedade para os clientes que consomem o serviço.
O código abaixo exemplifica a classe Produto:
using System;
using System.Runtime.Serialization;
[DataContract]
public class Produto
{
[DataMember]
public string Tipo { get; set; }
}
Definindo o contrato do serviço e fazendo todas as configurações necessárias nos tipos que serão expostos, o próximo passo é a criação da classe que representará o serviço. Esta classe devera ter implementado todos os membros expostos pela Interface que define o contrato do serviço, incluído aqueles que não estão marcados com o atributo OperationContract, lembrando que tal implementação é uma imposição da linguagem e não do WCF. Essa implementação poder conter sua própria regra de negocio, além disso, as classes que representam o serviço podem configurar alguns recursos fornecidos pelo WCF e que estão acessíveis através de behaviors, como por exemplo: transações, sessões, seguranças e muitos outros.
O exemplo abaixo mostra como o WCF desacopla totalmente a regra de negocio de sua API, vemos que a classe que representa o serviço não possui nenhuma configuração do WCF.
using System;
public class Servico : IContrato
{
public Produto ListarProduto(string tipo)
{
return new Produto() { Tipo = tipo };
}
}
Mas então você deve estar se perguntando:
– Se essa classe possui apenas a regra de negocio não contendo nenhuma configuração do WCF, então como ela ira trabalhar?
E eu respondo:
– Fácil, ela será consumida pelo WCF. E antes que você pergunte como será a configuração para que essa classe fique responsável por atender as requisições. Eu logo respondo que isso será realizado através do host.
Mas isso fica para o próximo post :p
Hehe… Com já dizia o sábio: “palma palma não priemos canico”… Prometo não demorar mais do que 100 dias para postar o próximo… rsrsrs
Bruno Castrillon
MCTS – Web Application