Como você faria?

22/02/2013

1

Olá pessoal,

Estou implementando um sistema de atualização de dados, a logica seria mais ou menos igual ao DropBox, que automaticamente quando o outro usuário cria/altera/exclui todos os usuários recebem a atualização.


Qual a melhor maneira de se fazer isto ? sem consumir/comprometer muito o desempenho do sistema.

Seria um timer executado a tantos segundos, ou alguma outra forma?


Desde já agradeço a todos pela ajuda.

Desenvolvendo em C#..

Responder

Posts

23/02/2013

Joel Rodrigues

Olá.
Você pode utilizar a classe FileSystemWatcher, que fica "observando" uma pasta ou arquivo e sempre que ocorrerem alterações, ela gera uma notificação.
Veja esse link: [url]http://msdn.microsoft.com/pt-br/library/system.io.filesystemwatcher.aspx[/url].
Responder

24/02/2013

Estevão Giron

Sobre o FileSystemWatcher, já estou usando...

Deixa eu tentar explicar melhor...

O Sistema funciona assim, Banco de Dados MYSQL Local, e Banco de Dados MYQSL Servidor, para comunicação estou usando WCF

A logica do sistema é o seguinte.

São varias tabelas que deverá ser sincronizadas ex: Clientes, Fornecedores, Fotos etc...

Hoje o sistema esta em pleno funcionamento, mas está funcionando assim o cliente precisa clicar em sincronizar os dados, quando sincroniza, ele verifica quais os dados que não foram atualizados e envia para o servidor, depois ele verifica no servidor quais os dados novos/alterados/exluidos e baixa a atualização...

O estou desenvolvendo um novo sistema de atualização onde deverá funcionar em background...onde não precisará mais clicar em sincronizar o próprio sistema irá enviar e receber as atualizações sem a necessidade de clicar em botão, deverá ser tudo automático. (Está logica é igual ao do Dropbox, não precisa clicar em nada, e automaticamente identifica as alterações e baixa)

Para enviar é facil, existem varias maneiras...inclusive estou usando o FileSystemWatcher para verificar se teve algum atualização local..

ex:

10 usuários que estão usando o software...

Usuário 1 - alterou o cadastro do João, automaticamente ele envia para o banco de dados....

Até aí sem problema...

O Problema esta sendo pra identificar se tem atualização a ser baixada ou não...

Os outros 9 usuários como irão saber se tem atualização a ser baixada....

Qual seria a melhor maneria usando um timer para verificar via WCF a cada X segundos se tem atualização no servidor? ou existe alguma outra forma de se fazer isto...
Responder

25/02/2013

Joel Rodrigues

Bom, nesse caso, acho que realmente é necessário usar um timer. Ponha esse processamento em uma thread concorrente da thread principal e se possível use chamadas assíncronas, para evitar travamento do sistema.
Responder

25/02/2013

Valter Furtado

O servidor é gerenciado por você?? Se sim, por que não roda uma aplicação lá também... você tendo o ip dos usuários conseguiria (eu acho) enviar um comando de volta direto no ip para atualizar... tipo teria um serviço no servidor e um serviço no cliente.
Responder

25/02/2013

Robson Alves

Você pode trabalhar com windows services.

Esse serviço fica na máquina, então independente do usuário estar logado ou não no sistema, o serviço fica encarregado de atualizar. O timer neste caso é indispensável.

[url]http://msdn.microsoft.com/pt-br/library/gg454586.aspx[/url]

Responder

25/02/2013

Estevão Giron

Joel Rodrigues, realmente estava pensando em usar um timer, só quei pensei que teria alguma forma de o servidor avisar o cliente que tem atualização disponível...


Valter Furtado, Sim tenho um servidor dedicado, onde tenho total controle. Estava pensando em fazer esta comunicação entre tcp/ip mas o problema que este negocio de abrir porta, em alguns clientes existem regras, ou seja, firewall não permite.

Então estou pesando em fazer isto em wcf via http...


Robson Alves - RobsonAlves.net, realmente via windows service seria melhor, e estarei implementando no sistema...
Responder
Amigo, vou da uma dica aqui mas precisa ser validada para o seu cenário. Ainda não fiz testes neste nível, mas vc pode da uma pesquisada no html5 usando o websocket. Pelo pouco que li ele abstrai esta sua preocupação da comunicação entre cliente e servidor. Acredito inclusive que tem uma edição da .net magazine sobre este tema, mas infelizmente ainda não tive tempo de procurar sobre este assunto.

Vc pode da uma olhada neste link: http://www.html5rocks.com/en/tutorials/websockets/basics/

Se não me engano somente o IIS 8 é compatível com o websocket, tem de pesquisar

Tem um amigo meu que está desenvolvendo algo bem parecido, posso procurar mais informações sobre o projeto dele.

Qualquer coisa pode entrar em contato.

Espero ter ajudado.

Até mais.
Responder

25/02/2013

Robson Alves

Frederico neste caso, websocket seria a opção se as informações fossem todas web, mas ele tem que trabalhar com arquivos (pelo que entendi) ele pode implementar o web dele utilizando essa ideia, o qual tem o mesmo conceito da biblioteca abaixo.

http://signalr.net/
Responder

26/02/2013

Estevão Giron

Pessoal quero agradecer todos que postaram ai,

E cheguei a seguinte conclusao vou usar um serviço do windows, wcf e um thread que será executado a um determinado tempo....

O signalr... vai estar junto para um chat....
Responder

01/03/2013

Joel Rodrigues

Valeu, Estevão. Boa sorte então.
Sendo assim, vou encerrar o tópico, beleza?
Responder

01/03/2013

Estevão Giron

ok....pode encerrar...
Responder

02/03/2013

Joel Rodrigues

Obrigado pelo retorno.
Tópico encerrado.
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira