sexta-feira, 23 de abril de 2010

Acessar corretamente WCF no Silverlight

Acessar um webservice no Silverlight é fácil: a maneira default é adicionar uma referência ao service no projeto Silverlight. O Visual Studio executa a ferramenta slsvcutil.exe para gerar as classes proxy do serviço. Esta ferramenta é semelhante ao svcutil.exe porém especializada no Silverlight.

Aí, já nos deparamos com a primeira diferença: a proxy é gerada apenas com a versão assíncrona das operações. Isto faz sentido, pois não queremos travar o browser né?

Para cada operação temos um método Asynch() e um evento Completed. A sequência consiste em criar um handler para o evento e invocar o método asynch. Quando o controle retorna da invocação deste método, não podemos dizer que ele já executou, apenas que a mensagem foi enfileirada para envio ao web service.

Vejamos um trecho de código:



Qual o problema aqui? Se você sentiu a falta da chamada ao Close() na proxy, está correto. Mas onde fazer isso? Sem mais delongas, deve ser no mínimo depois que o handler do evento Completed for chamado, pois neste momento teremos a resposta da execução da operação. Eu digo no mínimo pois haverá ocasiões onde eu fecharei a proxy tempos depois.

Eu resolvi da seguinte forma:


A classe UserState é definida para armazenar toda a informação extra que precisamos, por exemplo, quem é a proxy que invocou a operação, se devemos ou não fechar a proxy e outro parâmetro conforme o caso, por exemplo, pode ser o próprio parâmetro da invocação asynch.


Por enquanto é isso. Aqui lembrei aos leitores do fato de que é preciso fechar a proxy e assim liberar recursos. Você está satisfeito com esta abordagem? Eu não! Em uma próxima oportunidade comentarei sobre o encadeamento de chamadas ao web service.

Nenhum comentário:

Postar um comentário