Veja neste artigo onde falamos sobre WCF, para podermos usar
os serviços WCF, é necessário referenciar o serviço. Essa referencia
devera ter uma classe que encapsulará o acesso ao serviço, que é conhecido como
Proxy.
O Proxy terá acesso aos dados do serviço (Metadados) ficando com os métodos expostos,
dando a impressão que o serviço esta rodando na máquina local, mas que em tempo
de execução, será feita uma requisição para o serviço remoto.
O Proxy poderá ser feito de três formas, por uma referencia feita pelo Visual
Studio com a opção Add Service Reference, onde é necessário fazer a referencia
do serviço.A outra é pelo utilitário svcutil.exe, onde é fornecido o endereço
do serviço, ela é capaz de gerar o Proxy, criando uma classe do serviço e um
arquivo de configuração.
Essas duas opções, suas configurações são feitas por um arquivo de configuração
(declarativa).
A terceira e ultima forma é de forma manual, e para isso é necessário conhecer
todo o serviço como binding e o endereço.
Um exemplo de Proxy no cliente.
using (Mensagem.MensagemClient
proxy = new Mensagem.MensagemClient("NetTcpBinding_IMensagem"))
{
Console.WriteLine(proxy.MensagemBoasVindas());
Console.ReadKey();
}
Uma coisa importante que devemos saber se colocarmos um bloco using dentro de
um Proxy é necessário tomar muito cuidado, pois como em bloco using no final de
seu bloco, o mesmo chamara um método dispose, e com o método dispose vem o
método close fechando a comunicação ou tentando, agora se no meio da operação
ocorrer um erro, o método close poderá fazer uso de outra comunicação e se
ocorrer um erro nesse momento um exception do tipo
CommunicationObjectFaultedException será lançada, mascarando o real
problema.
Para corrigir esse problema podemos chamar o método Abort onde será encerrada a
comunicação entre o cliente e o serviço.
Veja um exemplo abaixo
Mensagem.MensagemClient proxy = new
Mensagem.MensagemClient ("NetTcpBinding_IMensagem");
try
{
Console.WriteLine(proxy.MensagemBoasVindas());
proxy.Close();
}
catch (CommunicationException
e)
{
proxy.Abort();
}
catch (TimeoutException
e)
{
proxy.Abort();
}
catch (Exception
e)
{
proxy.Abort();
throw;
}
Até o próximo artigo.
Fernando R. Silva
http://www.nandosilva.com