Creando excepciones personalizadas en WCF y cachandolas en PHP

wcf-php

wcf-php

En este artículo les enseñaré 2 cosas, una de ellas será crear un servicio wcf desde el cual puedan manejar sus propias excepciones y lo otro será enseñarles a consultar cada tipo de excepción.

Empezaré suponiendo que ya han creado su servicio en wcf, lo que nos faltaría sería agregar las excepciones personalizadas y será ese nuestro punto de partida, yo acostumbro siempre crear en un solo archivo todos los tipos de excepciones que utilizaré y un ejemplo podría ser el siguiente:

using System.Runtime.Serialization;
 
namespace PagoEnLineaWebService.Exceptions
{
    [DataContract]
    public class ArgumentFault
    {
        [DataMember]
        public string Argument { get; set; }
 
        [DataMember]
        public string Message { get; set; }
    }
}

La idea es crear todos los tipos de excepciones que crean que se deberían agrupar o enviar a los clientes, en este caso he creado una excepción llamada ArgumentFault y la idea es utilizarla cuando se ha enviado algún parámetro erróneo que es necesario, ya verán.

Luego de que tenemos nuestra excepción, para utilizarla simplemente luego de una validación de datos, si alguna regla no se cumple pueden utilizar este código para romper la ejecución de la aplicación y enviar la señal de error, en este código que he escrito para ejemplificar, el parámetro username no cumple una validación de longitud y al no pasar es que se envía una señal de error.

public string Hello (string username)
{
    if (username.Length > 10)
    {
        var fault = new ArgumentFault {
            Argument = "username",
            Message = "El nombre de usuario no puede contener más de 10 caracteres" };
        throw new FaultException<ArgumentFault>(fault, "WCF_Hello");
    }
 
    return string.Format("-- {0} --", username.ToString());
};

Listo, ahora implementaremos un cliente en PHP muy sencillo utilizando la extensión php_soap, el cual consumirá el método Hello y para probarlo de una vez enviaremos como parámetro una cadena que supere los 10 caracteres.

try
{
    $client = new SoapClient("http://localhost:49666/PruebaServicio.svc?wsdl");
    $params = array(
        'username' => 'jackfiallos'
    );
 
    $result = $client->WCF_Hello($params);
 
    echo "--pre--";
    print_r($result);
    echo "--/pre--";
}
catch (SoapFault $fault) 
{
    echo "--hr--";
    echo "Argument: ".$fault->detail->ArgumentFault->Message."<br>";
    //var_dump($fault);
}
catch (Exception $ex) 
{
    echo "--hr--";
    echo "Message: ".$ex->Message."<br>";
}

Y si todo marcha bien verán la excepción de tipo ArgumentFault y bueno, todo esto lo explico porque muchas veces suelen utilizar solamente el tipo genérico Exception y aunque está bien hacerlo, no se obtiene todo el detalle completo del error, lo que muchas veces solemos pensar que quienes hicieron el código del servicio no hicieron bien su trabajo.

Creo que este artículo da para explicar muchas más cosas, pero esta vez decido no ahondar mucho en el tema e ir al grano, espero que este mini tuto les ayude a comprender mejor el manejo de errores y su implementación.

Happy Coding! 🙂

Co-fundador de Qbit Mexhico, usuario de linux, Developer en tecnologías web.. Nicaragüense, centro en basketball, primer centro en rugby y pintor los fines de semana. Ortögrafo y ambientalista psicológico (de escritorio).. ese soy yo!

Si te ha servido compártelo y difunde nuestro blog..

Facebook Twitter LinkedIn Google+ Flickr YouTube Skype 

Compartir en...Tweet about this on TwitterPin on Pinterest0Share on LinkedIn0Share on Google+0Share on Facebook1