Excepciones en WCF

Tal y como comentaba el vecino de blog Oskar, durante la charla que nos ofrecio en el grupo de usuarios del Pais Vasco, yo pregunte si era posible que la clase que proporcinabamos como tipo a la clase genérica FaultException derivase de la clase Exception. La motivación de esta pregunta está en poder manejar internamente al servcio o propagar excepciones desde el mismo usando la misma jerarquía de excepciones.


Tas investigar un poco más el tema he llegado a la conclusión de que no necesitamos que la clase que envolvemos en la clase genérica FaultException derive de Exception, tal y como yo proponia, porque FaultException ya deriva de Exception. De todos modos agredezco a Oskar que se molestase en buscar las solución a mi pregunta.

Creo que es mucho más lógico que tengamos una clase derivada de FaultException<> que podemos manejar como una excepción normal o como una excepción que propagamos por WCF si queremos.

Vamos que para soportar el escenario que yo planteaba lo que haría es declara una excepción que derive de FaultException<>


public class InvalidContactFault : FaultException<string>


{


  public InvalidContactFault(string faultDetail):


    base(faultDetail)


    {


    }


}


Lo que me permite lanzar una excepción y capturarla dentro de las fronteras del mismo servicio como cualquier otra excepción gracias a que FaultException deriva de Exception…


try


{


  //Tras validar que el contacto no existe lanzamos una excepción


  throw new InvalidContactFault(«El contacto no exite»);


}


//… que capturamos en la parte servidor del servicio


  catch (InvalidContactFault ex)


{


  //Podemos por ejemplo crear el contacto


  //al vuelo en el servidor


}


o si preferimos podemos dejar que se propague hasta el cliente a través de los mecanismos de WCF y poder capturarla en el cliente y extraer la información del error que ocurrio en el servidor como es habitual:



try


{


  proxy.GetContact(1);


}


catch (InvalidContactFault ex)


{


  Console.WriteLine(ex.Detail);


}

3 comentarios sobre “Excepciones en WCF”

  1. Oye, una duda que me asalta… Hay lenguajes en los que no importa si escribes con mayúsculas o minúsculas, porque no se distinguen. Ahora bien ¿para el compilador de .Net la ‘b’ y la ‘v’ son lo mismo? jijiji…

  2. No me funcionó con VS 2008, creé una FaultException tal así:

    public class InvalidContactFault : FaultException

    Pero en el cliente, el compilador no me la pillaba, indicaba que tenía que ser Exception (o heredar), aunque en la jerarquía sí lo hace…pero no me dejaba :'(

    saludos y gracias.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *