Mejores prácticas para mensajes de reglas de negocio por medio de webservices.

24/06/2008 - 23:34 por Ariel Larraburu | Informe spam
Hola Gente, tengo una consulta mas que nada de arquitectura. El tema es asi,
tengo una aplicacion en N capas con entidades. las transacciones con la capa
de reglas de negocios las manejo con entidades por temas de
interoperabilidad con diferentes interfases de diferentes tecnologias.

La pregunta es la siguiente: A veces los metodos de reglas de negocio son
complejos y pueden tener muchos resultados que hagan que no se complete la
transaccion solicitada. Cual es para uds la mejor forma de transportar el
estado de la llamada a un metodo y el mensaje devuelto por el motor de
reglas? exceptions, parametros por referencia o salida, etc?. Como fachada
estoy usando webservices.

Para ejemplificar un poco la pregunta, suponiendo que tienen un servicio que
da de alta clientes:

public void ClientCreate(entities.Client client)
{
...
}

Siendo que el cliente puede que no se deba crear por varios motivos (ya
existe, alguna propiedad no es correcta, etc etc), como hacen llegar esta
informacion al cliente?

Para casos donde no se usan webservices una exception parece buena opcion,
pero si se genera una exception en algo que esta despues de un webmethod el
resultado devuelto al webproxy no es un mensaje soap y es muy artesañal
obtener el mensaje del html que recibe el proxy.

Muchas gracias.

Ariel.
 

Leer las respuestas

#1 Willy Mejía
25/06/2008 - 23:31 | Informe spam
En cuanto a los servicios web se tienen dos opciones:

1. Definir en el servicio web un "SOAP Fault" el cual se retorne al cliente
en caso de que el servicio de negocio retorne un fallo --ya sea por valor o
excepción. Si utilizas WCF investiga sobre FaultContract y FaultException,
para ASMX investiga sobre SoapException.

2. Definir en el método/operación del servicio web un mensaje de respuesta
al respecto. Ya que las operaciones serán de solicitud/respuesta
(incluso con "void", a menos que se especifique que es "one-way");
luego entonces que sea de provecho la respuesta.

Si quieres conocer mis preferencias, pues es la de propagar excepciones y
para servicios web utilizar "SOAP Fault", más no es una regla.

Saludos,
Willy Mejía.
willy.mx.kz


"Ariel Larraburu" escribió en el mensaje de
noticias:
Hola Gente, tengo una consulta mas que nada de arquitectura. El tema es
asi, tengo una aplicacion en N capas con entidades. las transacciones con
la capa de reglas de negocios las manejo con entidades por temas de
interoperabilidad con diferentes interfases de diferentes tecnologias.

La pregunta es la siguiente: A veces los metodos de reglas de negocio son
complejos y pueden tener muchos resultados que hagan que no se complete la
transaccion solicitada. Cual es para uds la mejor forma de transportar el
estado de la llamada a un metodo y el mensaje devuelto por el motor de
reglas? exceptions, parametros por referencia o salida, etc?. Como fachada
estoy usando webservices.

Para ejemplificar un poco la pregunta, suponiendo que tienen un servicio
que da de alta clientes:

public void ClientCreate(entities.Client client)
{
...
}

Siendo que el cliente puede que no se deba crear por varios motivos (ya
existe, alguna propiedad no es correcta, etc etc), como hacen llegar esta
informacion al cliente?

Para casos donde no se usan webservices una exception parece buena opcion,
pero si se genera una exception en algo que esta despues de un webmethod
el resultado devuelto al webproxy no es un mensaje soap y es muy artesañal
obtener el mensaje del html que recibe el proxy.

Muchas gracias.

Ariel.

Preguntas similares