none
Comunicação servidor para cliente RRS feed

  • Pergunta

  • Pessoal,

    Sou novo com WCF, e estou com um dúvida.
    Trabalho muito com Socket, e agora resolvi desenvolver um projeto com WCF. Sempre que eu vejo exemplos é o cliente consumindo o serviço. Mas a minha realidade aqui é outra onde o Serviço tem que enviar uma informação para o Cliente.

    É possível fazer em WCF?

    Alguém poderia me ajudar?
    Henrique Fávaro Tâmbalo - Se a resposta ajudou, marque como resposta!
    quarta-feira, 17 de março de 2010 11:21

Respostas

  • Boas Henrique,

    Na verdade, o que você precisa fazer no teu serviço são dois métodos: Subscribe e Unsubscribe. Onde o primeiro você se vincula as notificações, e o segundo você se desconecta, ou seja, não está mais interessado em receber as notificações do serviço.

    Internamente, o WCF irá fazer o processamento que desejar, e se necessário, invocará os callbacks dos clientes que estão armazenados.
    http://www.israelaece.com
    quarta-feira, 17 de março de 2010 13:08
    Moderador

Todas as Respostas

  • Boas Henrique,

    Se entendi bem, é só você inverter. :)

    Mas olha, se você quer ter a possibilidade do seu serviço notificar os clientes de que algo aconteceu, então de uma olhada nos callbacks: http://www.israelaece.com/post/WCF-Tipos-de-Mensagens.aspx.

    Se preferir, no video sobre Tipos de Mensagens, eu também comento sobre eles: http://www.israelaece.com/post/WCF-Videos.aspx
    http://www.israelaece.com
    quarta-feira, 17 de março de 2010 11:36
    Moderador
  • Israel, tudo beleza? Aqui é o Henrique de São José do Rio Preto (SENAC).

    Você diz inverter... o cliente ser um serviço e serviço ser um cliente?

    Na verdade o que eu preciso é assim, o cliente fica conectado o tempo todo com o Serviço, quando o serviço tem alguma coisa nova para esse cliente, ele envia a informação.

    Como se fosse um Socket, servidor x cliente que fica o tempo todo conectado. Assim quando preciso fazer algo no cliente, envio uma informação através do servidor.
    Henrique Fávaro Tâmbalo - Se a resposta ajudou, marque como resposta!
    quarta-feira, 17 de março de 2010 12:32
  • Boas Henrique,

    Suspeitei que fosse você. ;)

    Com relação ao teu problema, tente olhar os callbacks. Deve ser isso que precisa.
    http://www.israelaece.com
    quarta-feira, 17 de março de 2010 12:39
    Moderador
  • Israel,

    Eu dei uma olhada nos callbacks... No caso do one-way, o cliente envia uma requisição... e quando o servidor faz a operação ele devolve.
    Mas olha meu caso, eu não sei quando o servidor vai falar com o cliente.
    Imagine assim:

    Você tem uma interface WEB, ai um determinado usuário acessa a WEB e altera um Status (campo do banco de dados) de 1 para 3. Aí imagine que eu tenha um timer na aplicação que de 5 em 5 minutos verifica o campo Status os registros que estão como 3. Daí eu tenho que saber de qual cliente é esse registro e enviar uma mensagem para esse cliente.


    Um cenário com Socket.

    - Ativo o servidor que fica escutando a porta 1000
    - O cliente se conecta no porta 1000.
    - Quando o cliente se conecta eu tenho o IP dele.
    - Quando o status altera para 3 eu pego o IP daquele cliente alterado e envio um caracter, exemplo @
    - O cliente recebe o @ e já sabe o que tem que fazer...

    Henrique Fávaro Tâmbalo - Se a resposta ajudou, marque como resposta!
    quarta-feira, 17 de março de 2010 13:02
  • Boas Henrique,

    Na verdade, o que você precisa fazer no teu serviço são dois métodos: Subscribe e Unsubscribe. Onde o primeiro você se vincula as notificações, e o segundo você se desconecta, ou seja, não está mais interessado em receber as notificações do serviço.

    Internamente, o WCF irá fazer o processamento que desejar, e se necessário, invocará os callbacks dos clientes que estão armazenados.
    http://www.israelaece.com
    quarta-feira, 17 de março de 2010 13:08
    Moderador
  • Beleza Israel,

    Vou dar uma estudada nesse Subscribe e Unsubscribe.

    Obrigado pela ajuda!
    Henrique Fávaro Tâmbalo - Se a resposta ajudou, marque como resposta!
    quarta-feira, 17 de março de 2010 13:20