Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O exemplo ExpectedExceptions demonstra como capturar exceções esperadas ao usar um cliente tipado. Este exemplo é baseado nos Primeiros Passos, que implementa um serviço de calculadora. Neste exemplo, o cliente é um aplicativo de console (.exe) e o serviço é hospedado pelo IIS (Serviços de Informações da Internet).
Observação
O procedimento de configuração e as instruções de compilação para este exemplo estão localizados no final deste tópico.
Este exemplo demonstra a captura e manipulação dos dois tipos de exceção esperados que os programas corretos devem manipular: TimeoutException e CommunicationException.
Exceções que são geradas por métodos de comunicação num cliente Windows Communication Foundation (WCF) podem ser esperadas ou inesperadas. Exceções inesperadas incluem falhas catastróficas como OutOfMemoryException e erros de programação como ArgumentNullException ou InvalidOperationException. Normalmente, não há nenhuma maneira útil de lidar com erros inesperados, portanto, normalmente, você não deve detetá-los ao chamar um método de comunicação de cliente WCF.
As exceções esperadas dos métodos de comunicação em um cliente WCF incluem TimeoutException, CommunicationExceptione qualquer classe derivada de CommunicationException. Eles indicam um problema durante a comunicação que pode ser tratado com segurança anulando o cliente WCF e relatando uma falha de comunicação. Como fatores externos podem causar esses erros em qualquer aplicativo, os aplicativos corretos devem capturar essas exceções e recuperar quando elas ocorrerem.
Existem várias classes derivadas de CommunicationException que um cliente pode lançar. Em alguns casos, as aplicações também capturam alguns deles para tratamento especial, mas deixe que os restantes sejam tratados como um CommunicationException. Isto pode ser conseguido capturando primeiro o tipo de exceção mais específico e, em seguida, capturando-o numa cláusula de captura posterior.
O código que chama um método de comunicação do cliente deve capturar o TimeoutException e CommunicationException. Uma maneira de lidar com esses erros é abortar o cliente e relatar a falha de comunicação.
try
{
...
double result = client.Add(value1, value2);
...
client.Close();
}
catch (TimeoutException exception)
{
Console.WriteLine("Got {0}", exception.GetType());
client.Abort();
}
catch (CommunicationException exception)
{
Console.WriteLine("Got {0}", exception.GetType());
client.Abort();
}
Se ocorrer uma exceção esperada, o cliente pode ou não ser utilizável posteriormente. Para determinar se o cliente ainda é utilizável, verifique se a State propriedade é CommunicationState. Aberto. Se ainda estiver aberto, ainda é utilizável. Caso contrário, você deve abortar o cliente e liberar todas as referências a ele.
Atenção
Você pode observar que os clientes que têm uma sessão muitas vezes não são mais utilizáveis após uma exceção, e os clientes que não têm uma sessão geralmente ainda são utilizáveis após uma exceção. No entanto, nenhum deles é garantido, portanto, se você quiser tentar continuar usando o cliente após uma exceção, seu aplicativo deve verificar a State propriedade para verificar se o cliente ainda está aberto.
Quando você executa o exemplo, as respostas e exceções da operação são exibidas na janela do console do cliente.
O processo do cliente executa dois cenários, cada um dos quais tenta chamar Add seguido por Divide. O primeiro cenário simula um problema de rede interrompendo o cliente antes de fazer a chamada para Divide. O segundo cenário causa uma situação de timeout ao definir o timeout como demasiado curto para que o método seja concluído. A saída esperada do processo do cliente é:
Add(100,15.99) = 115.99
Simulated network problem occurs...
Got System.ServiceModel.CommunicationObjectAbortedException
Add(100,15.99) = 115.99
Set timeout too short for method to complete...
Got System.TimeoutException
Para configurar, compilar e executar o exemplo
Verifique se você executou o procedimento de instalação do One-Time para os exemplos do Windows Communication Foundation.
Para criar a edição C# ou Visual Basic .NET da solução, siga as instruções em Criando os exemplos do Windows Communication Foundation.
Para executar o exemplo em uma configuração de máquina única ou cruzada, siga as instruções em Executando os exemplos do Windows Communication Foundation.