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! 🙂