WCF - Manejo de excepciones

Un desarrollador de servicios WCF puede encontrar algunos errores imprevistos que requieran informar al cliente de manera adecuada. Tales errores, conocidos comoexceptions, normalmente se manejan usando bloques try / catch, pero nuevamente, esto es muy específico de la tecnología.

Dado que el área de preocupación de un cliente no se trata de cómo ocurrió un error o los factores que contribuyen a un error, el contrato de falla de SOAP se usa para comunicar el mensaje de error del servicio al cliente en WCF.

Un contrato de fallas permite al cliente tener una vista documentada de los errores ocurridos en un servicio. El siguiente ejemplo proporciona una mejor comprensión.

Step 1 - Se crea un servicio de calculadora fácil con operación de división que generará excepciones generales.

using System;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Runtime.Serialization;
usingSystem.ServiceModel;
usingSystem.Text;

namespace Calculator {
   // NOTE: You can use the "Rename" command on the "Refactor" menu to change 
   // the interface name "IService1" in both code and config file together.
   
   [ServiceContract]
   
   public interface IService1 {
      [OperationContract]
      int divide(int num1, int num2);
      // TODO: Add your service operations here
   }
}

La codificación para el archivo de clase se muestra a continuación:

Ahora, cuando intentemos dividir el número 10 por cero, el servicio de calculadora arrojará una excepción.

La excepción se puede manejar mediante el bloque try / catch.

Ahora, cuando intentamos dividir cualquier número entero entre 0, devolverá el valor 10 porque lo hemos manejado en el bloque catch.

Step 2 - En este paso se utiliza FaultException para comunicar la información de la excepción al cliente desde el servicio.

public int Divide(int num1, int num2) { 
   //Do something 
   throw new FaultException("Error while dividing number"); 
}

Step 3- También es posible crear un tipo personalizado para enviar el mensaje de error usando FaultContract. Los pasos esenciales para crear un tipo personalizado se mencionan a continuación:

Un tipo se define mediante el uso del contrato de datos y se especifican los campos que se pretenden devolver.

La operación del servicio está decorada por el atributo FaultContract. También se especifica el nombre del tipo.

Se crea una instancia de servicio para generar excepciones y se asignan propiedades de excepción personalizadas.