Excepciones esperadas
Este ejemplo muestra cómo detectar las excepciones esperadas cuando se usa un cliente con tipo. Este ejemplo se basa en Ejemplo de introducción que implementa un servicio de calculadora. En este ejemplo, el cliente es una aplicación de consola (.exe) e Internet Information Services (IIS) hospeda el servicio.
Nota
El procedimiento de instalación y las instrucciones de compilación de este ejemplo se encuentran al final de este tema.
Este ejemplo muestra la detección y administración de dos tipos de excepciones esperadas que los programas correctos deben gestionar: TimeoutException y CommunicationException.
Las excepciones que se producen a partir de los métodos de comunicación en un cliente Windows Communication Foundation (WCF) pueden ser esperadas o inesperadas. Las inesperadas incluyen errores graves como OutOfMemoryException y errores de programación como ArgumentNullException o InvalidOperationException. No hay normalmente ninguna manera útil de administrar errores inesperados, por lo que normalmente no debería detectarlos cuando se llama a un método de comunicación de cliente WCF.
Las excepciones esperadas de los métodos de comunicación en el cliente WCF incluyen TimeoutException, CommunicationException y cualquier clase derivada de CommunicationException. Indican un problema durante la comunicación que se puede administrar sin ningún riesgo anulando el cliente WCF y creando un informe de un error de comunicación. Dado que los factores externos pueden producir estos errores en cualquier aplicación, las aplicaciones correctas deben detectar estas excepciones y recuperarse cuando se produzcan.
Hay varias clases derivadas de CommunicationException que un cliente puede iniciar. En algunos casos, las aplicaciones detectan también algunas de ellas para que se gestionen de forma especial, pero deja que otras las gestionen como CommunicationException. Esto se puede lograr detectando el tipo de excepción más concreto primero y detectando a continuación CommunicationException en una cláusula catch posterior.
El código que llama a un método de comunicación de cliente debe detectar TimeoutException y CommunicationException. Una manera de administrar tales errores es anular el cliente e informar del error de comunicación.
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();
}
Si se produce una excepción esperada, el cliente podrá utilizarse después o no. Para determinar si el cliente todavía se puede utilizar, compruebe que la propiedad State sea CommunicationState.Opened. Si está abierta aún, se podría utilizar. De lo contrario debería anular el cliente y liberar todas las referencias a él.
Precaución: |
---|
Puede observar que, en ocasiones, los clientes que tienen una sesión no se pueden usar después de una excepción. Los clientes que no tienen una sesión se pueden seguir usando después de una excepción. Sin embargo, no se garantiza ninguno de ellos, de manera que si intenta continuar usando el cliente después de una excepción, la aplicación debería comprobar la propiedad State para comprobar que el cliente sigue abierto. |
Al ejecutar el ejemplo, las respuestas y excepciones de la operación se muestran en la ventana de la consola del cliente.
El proceso de cliente ejecuta dos escenarios, cada uno de los cuales intenta llamar a Add
seguido por Divide
. El primer escenario simula un problema de la red anulando el cliente antes de realizar la llamada a Divide
. El segundo escenario produce una condición de tiempo de espera agotado definiendo un tiempo de espera demasiado corto para que el método pueda completarse. El resultado esperado del proceso de cliente es:
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, generar y ejecutar el ejemplo
Asegúrese de que ha realizado el Procedimiento de instalación único para ejemplos de Windows Communication Foundation.
Para generar el código C# o Visual Basic .NET Edition de la solución, siga las instrucciones de Generación de ejemplos de Windows Communication Foundation.
Para ejecutar el ejemplo en una configuración de equipos única o cruzada, siga las instrucciones de Ejecución de ejemplos de Windows Communication Foundation.
Copyright © 2007 Microsoft Corporation. Reservados todos los derechos.