Destaques

Certificações Prometric 20% e Second Shot LEVE A SUA CARREIRA EM INFORMÁTICA até o SEU PRÓXIMO DESTINO ECONOMIZE ATÉ 20% NOS PACOTES DE CERTIFICAÇÃO DA MICROSOFT COM SEGUNDAS TENTATIVAS GRÁTIS http://bit.ly/bkRfRc

Ler Artigo Completo

Palestra Cloud Computing na ULBRA/PVH Na semana de informática da Ulbra de Porto Velho/RO, tive a oportunidade pelo SENAI/RO de ir debater sobre Cloud Computing & SQL Azure, segue fotos do evento: [caption id="attachment_320" align="aligncenter"...

Ler Artigo Completo

MS lança Visual Studio focado na nuvem Família Visual Studio crescendo, foi divulgado nesta terça-feira, 03 de agosto o lançamento de do Visual Studio LightSwitch, especial para foco em desenvolvimento na Nuvem. Por enquanto será...

Ler Artigo Completo

Palestras no Tech Ed 2010 Disponíveis! Bem vindos ao Tech·Ed 2010 O maior evento técnico brasileiro voltado para profissionais de TI e Desenvolvedores que utilizam a tecnologia Microsoft em seu dia a dia, este ano vem repleto de novidades. Você...

Ler Artigo Completo

Microsoft em Números Se você anda antenado nas notícias do “mundo Microsoft” deve ter ouvido falar na semana passada sobre as vendas do Windows 7 terem alcançado o número de 150 milhões de cópias em 8 meses, o que...

Ler Artigo Completo

  • Prev
  • Next

Windows Communication Foundation

Categoria: .NET Framework, Arquitetura, Geral, Visual C#, WCF

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. :D

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

Visão Geral de Aplicações em N Camadas (Parte I – Teórico)

Categoria: ASP.Net, Arquitetura, Desenv. Enterprise, Desenv. Web, Desenv. Windows, Melhores Práticas, Microsoft Solutions, Windows Cliente

Olá membros e visitantes, eu pretendo escrever artigos básicos, intermediários e avançado, porém, para chegarmos até os artigos intermediários e avançados precisamos de alguns conhecimentos básicos, este é um artigo teórico e espero que gostem do assunto, fique a vontade para perguntas nos comentários.

Neste meu segundo artigo inicio escrevendo sobre desenvolvimento de aplicações em camadas. O desenvolvimento em N camadas também pode ser chamada de “aplicativos distribuidos” ou ainda “aplicativos multicamadas” o que oferece como principais vantagens: manutenibilidade e escalabilidade ao seu aplicativo.

O que é isso?
Manutenibilidade é a facilidade de manter ou armazenar alguma coisa, segundo o wiktionary.org
Escalabilidade é a facilidade em manipular uma determinada parte de um todo, também retirado de wikipedia.org

Então como isso funciona?
O desenvolvimento em camadas é separar seu aplicativo em partes visando o processamento destas, para ser distribuido em cliente/servidor, podendo – obviamente – ser em vários servidores. Em geral os aplicativos são construidos em 3 camadas, comumente conhecidas como: Presentation (Apresentação – Interface do Usuário (UI)), Business (Negócios) e Data Access (Acesso a Dados – DAL):

  •  Apresentação (UI): é a camada – layer – de disposição dos dados para o usuário, ou seja, como a informação é apresentada para o usuário.
  • Negócios: é a camada responsável pelas regras de negócios do aplicativo, ou seja, o código de manipulação/transformação de dados.
  • Acesso a Dados: é a camada responsável por recuperar os dados do banco de dados, ou seja, faz a conexão com o banco, executa as transações com o banco de dados e gerencia as conexões.
    Essas são praticamente as camadas obrigatórias para seu aplicativo.

E como funciona tudo isso na hora de programar?
Quando pensamos desenvolver em N camadas, o jeito mais fácil de criar este ambiente é dividir suas camadas em projetos distintos dentro de uma única solução, isto vale para qualquer ferramenta, neste artigo – óbvio – estarei usando o Visual Studio. Dentro do Visual Studio temos vários recursos para nos ajudar no processo de criação desta arquitetura:

  • DataSet Designer: no qual oferece uma propriedade chamada DataSet Project para que você possa separar o DataSet (camada com contém as entidade de dados) do TableAdapters (camda de acesso a dados) em projetos distintos, manténdo assim adivisão em camadas.
     veja mais em http://msdn.microsoft.com/pt-br/library/314t4see.aspx
  • LINQ to SQL oferece o método Attach que permite que você reuna o DataContext de diferentes camadas em um único aplicativo, o que é altamente recomendado para projetos com um modelo muito grande.
  • Entre outros.
    Vamos então detalhar mais sobre as principais camadas apresentadas acima.

Camada de Apresentação (UI)

A camada de aresentação tem a única responsabilidade de montar a disposição da informação para o usuário, por isso é chamada de interface do usuário (UI), esse camada de se comunica com a camada intermediária para chamar as métodos e funções.

Camada Intermediária

A Camada intermediária é a camada que faz a ponte da camada de apresentação e a camada de dados, porém, essa não é a única responsabilidade desta camada, pois, dentro desta camada é onde fica a regra de negócios da aplicação, como por exemplo: cálculos financeiros, verificações condicionais, regras de validação, etc. Onde podemos ter nesse intermédio N camadas, especificando ainda mais as funções.

Camada de Acesso a Dados

A camada de dados é tem a responsabilidade de executar as consultas/alterações no banco de dados, essa camada que inicia a conexão, executa o procedimento e fecha a conexão com o banco. 

Como esse artigo tem o objetivo de ser completamente teórico fica para a segunda parte iniciarmos este cenário dentro do Visual Studio 2008/2010, usando LINQ e Entity Framework.

Espero ter contribuido com conhecimento a todos, não deixe de comentar e clicar nos meus anúncios adsense do google.
Atenciosamente,
Ricardo M Machado
MCT, MCITP, MCTS – Community Leader.

Referências:
http://msdn.microsoft.com/pt-br/library/bb384398.aspx

Links Relatcionados:
http://msdn.microsoft.com/pt-br/library/314t4see.aspx
http://msdn.microsoft.com/pt-br/library/bb882661(en-us).aspx
http://msdn.microsoft.com/pt-br/library/bb384570.aspx

Switch to our mobile site