none
CallBack e Instancia RRS feed

  • Pergunta

  • Olá pessoal,

    Estou com uma dificuldade tremenda de achar uma solução para isso na internet.

    Tenho um serviço em WCF, PerSession.

    Gostaria de fazer uma espece de mensageiro, quando um cliente utilizar um método EnviarMensagem(string mensagem)

    quero que essa mensagem seja disparada para todos os outros cliente conectados com o servidor.

     

    Ou seja, como pego todas as intancias ativas? tentei utilizar o OperationContext e não encontrei.

    E como pego uma instancia pelo seu ID?

     

    Obrigado!

    sábado, 19 de março de 2011 00:28

Respostas

Todas as Respostas

  • Boas Alan,

    Em princípio, não temos acesso diretamente a isso, pois é o WCF quem controla a criação. Talvez, você possa criar um IInstanceProvider e controlar a criação das instâncias, mas neste caso, acredito que a melhor saída não seria utilizar uma instância única do serviço (Single), armazenando o canal de callback com cada cliente? Assim, quando precisar notificar, você simplesmente percorre a coleção, invocando um a um.
    http://www.israelaece.com
    segunda-feira, 21 de março de 2011 10:45
    Moderador
  • Acabei fazendo desse jeito mesmo.

    Coloquei no modo Per Session, e quando a instancia é criada eu crio o CallBack e coloco em uma coleção...

    Só que me apareceu outro problema...

    Quando um cliente dispara um método para o servidor e esse metodo é o responsavel por disparar para todas da coleção de callback, o usuario fica preso e só termina a execução depois do servidor disparar para todos os callbacks... e eu não posso utilizar OneWay para esse método.

    Estão coloquei uma Thread parametrizada. Só que as vezes o cliente fica esperando a resposta do servidor e a mensagem não chega. até dar TimeOutException.

    segunda-feira, 21 de março de 2011 15:10
  • Boas Alan,

    Se estiver utilizando Request-Reply, então terá mesmo que esperar a execução encerrar para o fluxo voltar ao cliente. Mas porque não utilizar oneway?!
    http://www.israelaece.com
    terça-feira, 22 de março de 2011 10:50
    Moderador
  • O cliente espera um resultado e é preciso capturar algumas exceptions caso tenha.

    terça-feira, 22 de março de 2011 12:58