<$BlogRSDUrl$>

Tuesday, January 25, 2005

 
.NET Remoting, notas gerais

Existem dois tipos de objectos no mundo do Remoting, os objectos moveis e os objectos remotos.

Objectos Remotos
Para um objecto poder comportar-se como remoto na plataforma .NET tem que derivar de MarshalByRefObject.

Na plataforma .NET entende-se por comunicação remota, comunicação entre appDomains.

Objectos Moveis
A classe tem que ter que ser seriavel e todas as suas referencias têm que ser para objectos seriaveis ou para objectos remotos.

Estrutura geral de uma aplicação em .NET Remoting
Existem 3 componentes distintos:
  • Servidor, onde residem os objectos remotos.
  • Cliente, quem efectua os pedidos.
  • um assembly conhecido quer pelo cliente quer pelo servidor, que contém as interfaces dos objectos remotos, bem como a implementação dos objectos moveis que são trocados entre o cliente e o servidor.
Passos na contrução da aplicação
  • definir a interface remota,
  • definir quais os objectos a serem passados entre cliente e servidor.
Implementação do servidor
  • implementar a interface remota,
  • derivar de MarshalByRefObject,
Por o servidor à "escuta" de pedido
  • criar um canal,
     HttpChannel chnl = new HttpChannel(1234);
  • registar o canal,
    ChannelServices.RegisterChannel(chnl);
    

  • registar a classe do objecto como WellKnownService,
    RemotingConfiguration.RegisterWellKnownServiceType(
    
    typeof(RemoteObject),
    "RemoteObject.soap",
    WellKnownObjectMode.Singleton);
Nota: reparar que a classe registada não está explicitamente "ligada" ao canal registado. O que é que se passa aqui? Como é feita a relação entre os dois ?

Implementação do cliente
  • criar e registar um canal,
    HttpChannel channel = new HttpChannel();
    
    ChannelServices.RegisterChannel(channel);
  • criar um proxy para o objecto remoto,
    ICustomerManager mgr = (IRemoteObject) Activator.GetObject(
    
    typeof(IRemoteObject),
    "http://localhost:1234/RemoteObject.soap");
Categorias de objectos remotos

Os objectos remotos estão separados em duas categorias:
  • Server Activated Objects (SAO)
  • Client Activated Objects (CAO)
Server Activated Objects - SAO's

Existem dois tipos de objectos SAO, Singleton e SingleCall.

Se o objecto for criado como Singleton, no máximo,apenas existe uma instância desse objecto, que atende os pedidos de todos os clientes num cenário de concorrencia (é necessário tomar os cuidados correspondentes).
Estes objectos são stateful, ou seja existe manutenção do estado do objecto entre chamadas.


Nota: os objectos Singleton, são particularmente úteis quando se pretende partilhar um recurso entre vários clientes.

No modo SingleCall, é criado um objecto por chamada, que é destruido no final desta, não existindo assim manutenção de estado.
Uma razão para utilização deste tipo de objectos é a sua escalabilidade, que é consequencia destes objectos não necessitarem de manter estado, podendo assim estar espalhados por um conjunto de maquinas.

Publicação de objectos remotos
Por vezes é necessário que uma instância de um objecto já criada, esteja disponível remotamente. Para que isso seja possível é necessário publicar esse objecto da seguinte forma.
YourObject obj = new YourObject();

RemotingServices.Marshal(obj,"YourUrl.soap");
Objectos publicados comportam-se como objectos Singleton.

Client Activated Objects - CAO's

ainda tenho que estudar estes melhor :)

Tempo de vida dos objectos

Os objectos remotos na plataforma .NET são criados com um tempo de vida (TTL) (por omissão é 5m), que é incrementado por cada chamada efectuada ao objecto (por omissão é 2m).

Quando o TTL termina a plataforma procura por objectos sponsor associados ao objecto remoto. Se não existirem sponsors associados ao objecto, ou o sponsor decidir que o TTL não é para ser renovado, o objecto remoto é marcado para ser garbage collected.

Algum cliente que ainda possua uma referência para o objecto e efectue uma chamada, recebe uma excepção.

Nota: Só têm o campo TTL objectos Singleton ou objectos CAO.
Nota2: Tenho que estudar melhor os sponsors.

Tipos de Evocação

Existem três tipos de evocação:
Chamadas sincronas
Neste tipo de chamadas o cliente fica bloqueado até o servidor ter terminado a tarefa. Alguma excepção ocorrida do lado do servidor é lançada na linha de onde o método foi chamado.

Chamadas assincronas
São efectuadas em duas fases:
  1. o cliente efectua a chamada, não ficando bloqueado à espera do resultado,
  2. se o cliente quiser receber o valor de retorno do método chamado, tem que chamar outro método, este já bloqueante.
Nota: trocando por miudos, o cliente pode dizer ao servidor, "vai despachando lá isso , que eu já cá volto para receber."

Chamadas assincronas one way
São iguais às chamadas assincronas, mas não permitem receber o retorno dos métodos.












Thursday, January 06, 2005

 
Notas sobre o tipo de objectos existentes em .NET Remoting

Pesquisando nos acetatos de FSD sobre remoting, encontrei lá uma tabela que achei interessante transcrever para aqui, pois mostra as diferenças entre os diferentes tipos de objectos.


SAO SingletonSAO Single Call CAO
Manutenção de estadoSimNãoSim
Tempo de vida do objectoControlado pelo lease managerDuração da chamada ao métodoControlado pelo lease manager
Construtor
Apenas sem parametrosApenas sem parametrosQualquer tipo de construtor

SAO - Server Activated Objects
CAO - Client Activated Objects

Notas adicionais:
Para utilizar objectos CAO é necessário que o assembly com a implementação do objecto esteja do lado do cliente, em vez de conhecer apenas a interface como acontece nos objectos SAO, no entanto, esta limitação não é problematica no meu caso pois cada cliente, funciona ao mesmo tempo como servidor.

É possivel utilizar um soapsud (???) em vez do assembly. Tenho que investigar melhor se é vantajoso.


É necessário investigar como funciona o lease manager e quais são as suas opções de configuração.


 
Notas para a implentação do protótipo do serviço de IM

Existem dois componentes:
  1. Um web service, onde a aplicação cliente efectua o login, e que tem conhecimento de quem está online e qual a sua localização.
  2. Um objecto remoto que está localizado na maquina do cliente, que funciona como caixa de mensagens.
A opção nesta altura é utilizar ligações directas entre os clientes, utilizando .net remoting com client activated objects (CAO).

Esta opção tem consequência serem utilizadas n ligações para conversar com n clientes diferentes, o que me parece razoavél pois não estão a ser gastos recursos de mais nenhum servidor.

Nota: ainda estou na duvida entre a utilização de objectos remotos CAO, ou server activated objects(SAO) em modo Singlecall. Pelo que percebi a diferença está na capacidade de manter estado e no tempo de vida do objecto.


Wednesday, January 05, 2005

 
Este site é interessante, porque tem todas aquelas coisas que perco horas à procura no msdn.

Já agora o que procurava era como obter o endereço ip da maquina de uma forma programatica. Como curiosidade:

//obter o nome da maquina
string host = Dns.GetHostName();

//obter os endereços atribuidos à maquina
IPHostEntry local = Dns.GetHostByName(host);

//atenção que podem existir mais do que 1

string enderecoIP = local.AddressList[0].ToString();


This page is powered by Blogger. Isn't yours?