Array
(
)

Como você faria?

Estevão Giron
   - 22 fev 2013

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#..

Joel Rodrigues
   - 23 fev 2013

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: http://msdn.microsoft.com/pt-br/library/system.io.filesystemwatcher.aspx.

0
|
0

Estevão Giron
   - 24 fev 2013

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

0
|
0

Joel Rodrigues
   - 25 fev 2013

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.

0
|
0

Valter Furtado
   - 25 fev 2013

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.

0
|
0

Robson Robsonalves.net
   - 25 fev 2013

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.

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

0
|
0

Estevão Giron
   - 25 fev 2013

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

0
|
0

Fredericopranto
   - 25 fev 2013

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.

0
|
0

Robson Robsonalves.net
   - 25 fev 2013

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/

0
|
0

Estevão Giron
   - 26 fev 2013

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

0
|
0

Joel Rodrigues
   - 01 mar 2013

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

0
|
0

Estevão Giron
   - 01 mar 2013

ok....pode encerrar...

0
|
0

Joel Rodrigues
   - 02 mar 2013

Obrigado pelo retorno.
Tópico encerrado.

0
|
0