Desenvolvimento - C#

.NET Remoting – Parte 1 - Acessando informações remotamente

Trafegue facilmente informações entre aplicações de diferentes domínios. Acesse aplicações remotamente via TCP ou HTTP.

por Andrey Sanches



Normalmente quando se inicia o desenvolvimento de uma aplicação, um dos primeiros questionamentos que se faz é: O Projeto vai ser WindowsForms ou WebApplication ?

Com o estouro de projetos Web, tecnologias WEB de acesso a banco de dados e a grande facilidade que as novas ferramentas de desenvolvimento proporcionam ao desenvolvedor, as intranets e internets estão cheias de sistemas rodando no browser. As grandes justificativas são devido a distribuição das aplicações, pois, como já sabemos, em um sistema WEB, a aplicação roda no servidor e por isso os clients não precisam ser atualizados a cada mudança de versão da aplicação.

Com essa “moda”, a aplicação perde em flexibilidade de telas, recursos avançados e processos complexos que poderiam ser feitos facilmente em ambiente DeskTop, sempre apoiando-se no fator deployment.

O .NET Remoting proporciona que seus aplicativos tenham comunicação com sistemas remotos utilizando protocolos de comunicação. Dessa forma, podemos aproveitar todos os recursos de um projeto Windowsforms com a facilidade de acessar informações remotas, estando em sua intranet ou até mesmo na internet.

Para que processos troquem informações, cria-se métodos com parâmetros e retornos de funções, e para que esses objetos possam trafegar devem ser Serializáveis. No artigo Serializando Objetos em .NET descrevo detalhadamente como serializar objetos. Dessa forma, o objeto então é serializado e enviado em um formato definido para que seja transportado pela rede até seu devido destino. A figura abaixo mostra a comunicação entre objetos.


Arquitetura .NET Remoting

Nesse artigo, vamos conhecer as duas formas de transporte de objetos na tecnologia .NET Remoting, são elas: Marshal-By-Value e Marshal-By-Ref.

Marshal-By-Value

Nesse cenário, os objetos trafegam diretamente entre aplicações e até entre aplicações rodando em diferentes máquinas através do processo de serialização. É possível fazer chamadas para métodos de uma determinada classe de um determinado assembly remotamente no servidor onde estão localizado as funções.

Marshal-By-Ref

Outro modo de trafegar objetos se dá pela utilização de proxys.

Nesse modo, o .NET Remoting cria um Proxy do objeto server no mesmo escopo do objeto Client, em seguida o objeto Client trata o objeto server como se estivesse na mesma aplicação. Para que um objeto seja do tipo Marshal-By-Ref, basta fazer com que a classe extenda (herde) da classe MarshalByRefObject como mostra o código abaixo:

public class Class1: MarshalByRefObject 
{
   public Class1()
   {

   }

   public string funcaoRemote()
   {
      return "Trafegando objetos entre aplicações";
   }
} 

Os canais de comunicação

Os objetos no .NET Remoting são trafegados utilizando canais, tanto no modo byValue ou proxy (byRef).

Os canais suportados pelo .NET FrameWork são: HTTP e TCP e as informações podem trafegar em modo SOAP ou binário.

Tanto em um canal como no outro podem trafegar informações usando SOAP ou binário, mas podemos notar grande ganho de desempenho quando combinamos HTTP/SOAP e TCP/Binário, lembrando que podemos trabalhar com .NET Remoting em tecnologias não .NET, utilizando-se por exemplo, de HTTP/SOAP, onde os objetos são trafegados em formato XML da mesma forma que os atuais Web Services.

Ativação dos Objetos

Um dos processos de configuração dos objetos serializáveis é a ativação.

A ativação nada mais é que configurar o acesso e trafego dos objetos, segue abaixo os tipos de acesso possíveis:

Ativação pelo Cliente: É criado uma instância entre o cliente e o servidor (um para um) e os estados dos objetos são mantidos durante operações.

A ativação pelo servidor, é feita diretamente no objeto remoto, onde é disponibilizado um nome para que os objetos clientes façam chamadas. Essa ativação divide-se em:

Ativação pelo Servidor – Single Call: Nesse modo, o objeto servidor cria uma instância somente para o método chamado pelo cliente.

Ativação pelo Servidor – Singleton: Nesse modo, é criado uma instância do objeto que serve todas as chamadas de objetos clientes.

Em nenhuma das ativações pelo Servidor, o estados dos objetos é mantido.

Conclusão

Nessa primeira parte, vimos as vantagens de utilizar o .NET Remoting em aplicações que necessitam “conversar” com outras aplicações. Fazer bom uso da internet e dos protocolos de comunicação não significa desenvolver os projetos para rodar em ambiente Web, e sim aproveitar dos recursos e tornar nossas aplicações mais ágeis e funcionais.

Na próxima parte desse artigo vamos aprender como configurar tanto a aplicação Client como a aplicação Server, para que as duas troquem informações utilizando-se da tecnologia .NET Remoting.

Até mais

Andrey Sanches

Andrey Sanches - Consultor da ITGROUP, MVP (Most Valuable Professional), MCP (Microsoft Certifield Professional) e trabalha com desenvolvimento de sistemas na tecnologia .NET desde sua versão beta. Líder da comunidade de desenvolvedores Codificando.Net de SP (www.codificando.net), ministra treinamentos especializados na Treinando.Net (http://www.treinando.net) e em diversas empresas, também escreve constantemente artigos para sites como Portal Linha de código, DevMedia e revistas como MSDN Magazine e Web Mobile.