none
Ajuda com WCF para comunicação entre cliente e servidor em Wpf C# RRS feed

  • Pergunta

  • Pessoal, estou desenvolvendo uma aplicação na empresa onde trabalho usando C# com Wpf onde uma de suas funcionalidades é manter disponível no computador do cliente as variações de informações que são calculadas usando a cotação de preços de ações(por exemplo) numa tela específica.. para isso eu capturos estes preços através de uma aplicação que eu desenvolvi e que roda numa máquina que tem um serviço pago especifico para cotações de preços onlne.. a aplicação salva continuamente as variações dos preços numa tabela que eu tenho no servidor de banco de dados.. a partir daí eu preciso de fazer um select que monta uma menssagem específica a ser enviada para uma tela(window) especifica no computador do cliente que requisita esta informação.. eu tentei fazer usando backgroundworker na window para consultar o banco continuamente de 1 em 1s, mas fica muito ruim o desempenho.. para uma tela apenas aberta ok funciona.. mas eu precisarei de várias telas abertas do mesmo tipo que tem objetos diferentes instanciados nela, e aí a aplicação não roda direito!

    Eu acho que a forma certa de se fazer isso é usando um WCF para consultar o banco no intervalo de tempo que eu definir(quero que seja pequeno de 1 em 1s no máximo) e então o WCF enviar as menssagens para os clientes, mas eu nunca fiz isso e não tenho idéia de arquitetura dessa coisa!! vcs podriam me ajudar com idéias de arquitetura da parte server e cliente para esta funcionalidade?

    Abraços.
    sexta-feira, 7 de dezembro de 2012 21:29

Todas as Respostas

  • Amigo, você quer que o WCF se responsabilize por enviar as mensagens ? 

    Acredito que esta forma não seja a melhor, veja  bem se você quer disponibilizar um serviço pense da seguinte forma:

    faça um seviço WCF, de preferência bom binding NetTcp para ser mais rápido e trafegar menos dados na sua rede. 

    pense no serviço da seguinte maneira, será dua partes:

    1. ele irá consultar o dado na base dados de forma continua, e não quando for delegado

    2. quando ele capturar o dado, ele deverá postar manter está informação em memória, em pílha, ou em qualquer lugar que seja de acesso rapido, assim a consulta a informação não fica ligada a consulta ao banco de dados, o que irá tornar sua aplicação mais rapida


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Facebook Olavo Neto
    Linkedin Olavo Neto
    Se for útil marque como resposta e faça um Developer feliz :)

    quarta-feira, 12 de dezembro de 2012 13:00
  • Olá Olavo, valeu por responder a minha pergunta.. Mas como vc mesmo disse não é uma boa ideia deixar o WCF se responsabilizar pelo envio das mensagens, haveria uma forma mais própria de se fazer isso? Pois o meu problema é que as mensagens mudam continuamente e eu não quero que cada tela seja responsável por fazer a consulta continuamente no wcf ou no banco de dados pois isto faz a aplicação ficar pesada e para fazer a tela consultar o wcf ou o banco eu tenho que fazer isso em outra thread senão a tela fica travada permanentemente.. imagina a tela consultando o wcf de 1 em 1s nunca ela poderá ser minimizada ou redimensionada ou o que o valha..

    vc tem uma outra sugestão?

    Abraços.

    quarta-feira, 12 de dezembro de 2012 16:41
  • não necessariamente você precisa travar a tela, faça chamadas assincronas ao WCF para solicitar a informação. assim você delega a chamada e só espera o retorno através do CallBack

    http://msdn.microsoft.com/en-us/library/ms730059.aspx


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Facebook Olavo Neto
    Linkedin Olavo Neto
    Se for útil marque como resposta e faça um Developer feliz :)

    quarta-feira, 12 de dezembro de 2012 18:03
  • Olá Olavo, valeu pelas respostas, mas ainda estou com algumas dúvidas, pois nunca trabalhei com wcf antes... Vc poderia me dizer como eu poderia deixar as informações que são consultadas no banco de dados continuamente pelo wcf armazenadas em memória?? que elemento eu usaria para isso?? e como eu poderia consultar o wcf passando parâmetros.. não é intuitivo pra mim, tanto como fazer um select no banco de dados!!

    vc sugere alguma coisa??

    Abraços.

    quinta-feira, 13 de dezembro de 2012 14:29