Excepciones en WCF. Heredar de Exception

Este post surgio ayer durante la charla que dimos Miguel Jimenez y yo sobre WCF para el grupo de usuarios Artalde.Net en la universidad de Deusto.

Rodrigo nos pregunto si a la hora de implementar una excepcion, la clase que implementamos para introducir en el FaultContract no podia heredar de la clase Exception. La respuesta es la siguiente. Si tenemos el siguiente ejemplo.

 [DataContract]
    public class HolaException:Exception
    {
        private string _descripcion;
        [DataMember]
        public string Descripcion
        {
            get { return _descripcion; }
            set { _descripcion = value; }
        }
	
    }

Se produce el siguiente error

El tipo ‘ExcepcionService.HolaException’ no puede ser ISerializable y tener el atributo DataContractAttribute

Para que funcione debemos de poner el atributo Serializable en nuestra Excepcion y en este caso ya funciona perfectamente el servicio.

Pero hay un problema, si utilizamos en el cliente la opcion Add Service Reference, esta no funciona y no nos genera ni la clase, ni el fichero de configuración. Debemos de realizar esta generación a partir de la herramienta svcutil, que funciona perfectamente

Si implementamos el cliente, nos tenemos que dar cuenta, que las propiedades de  la clase HolaException, no aparecen debido a que hemos marcado la clase como serializable y  no marcamos las propiedades con el atributo DataMember , para que el cliente pudiera acceder a esas propiedades deberiamos de implementar la serialización de la clase  nosotros mismos e incluir las propiedades en la serialización.

3 comentarios sobre “Excepciones en WCF. Heredar de Exception”

Responder a anonymous Cancelar respuesta

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