Secuenciar operaciones de un servicio

Un tema que me ha parecido interesante es la posibilidad de poder secuenciar operaciones dentro de un servicio WCF. Muy sencillo y muy fácil de utilizar….eso sí, tiene la pega que es que esta funcionalidad es específica de WCF y no sigue ninguna especificación WS-* estandard. Así que cuidado si tenéis un requisito de interoperabilidad entre el servicio y posibles aplicaciones clientes hechas en otras tecnologías ya que no podéis utilizar esta funcionalidad.


En un servicio WCF, sobre todo si se está usando sesión, es habitual necesitar que ciertas operaciones se realicen en un cierto orden. Imaginaros el típico carrito de compra. No se puede comprar si no se han seleccionado los elementos a comprar.


Con WCF es muy sencillo implementar esta lógica, usando dos propiedades que se establecen en el OperationBehavior; IsInitiating y IsTerminating.


Si IsInitiating está true en una operación cuando ésta se invoca se crea una nueva instancia y una nueva sesión. Si ya existe una sesión esta operación no tiene efecto. Por defecto está es valor es true.


Si IsInitiating está a false sólo se puede invocar la operación si antes se ha llamado a otra operación que ha iniciado la sesión. Esto provoca que siempre tenga que haber una operación con IsInitiating = true.


Si IsTerminating = true significa que cuando se invoque esta operación se terminará la sesión y se liberará la instancia cuando la operación se termine. El valor por defecto es false. Antes de invocar a una operación con IsTerminating=true es necesario llamar a otra operación que tenga IsInitiating = true.


Por último, es importante tener en cuenta que estas dos propiedades están relacionadas con el atributo SessionMode de ServiceContract. Si algunas operación del servicio tiene el valor IsInitiating = false o IsTerminating = true es necesario poner SessionMode.Required si no queremos que nos salga una excepción.


[ServiceContract ( SessionMode = SessionMode.Required, Namespace = «…», Name = «…» ) ]


public interface IService


{


…………………..



 

Ibon Landa

bon Landa lleva más de 15 años dedicado al desarrollo de software. Durante este tiempo ha trabajado en diferentes empresas en las cuáles ha podido trabajar en diferentes entornos y tecnologías. Actualmente está focalizado principalmente en tareas de desarrollo, arquitectura, en las herramientas del ciclo de vida y en todo lo relacionado con la plataforma de Cloud Computing Microsoft Azure, área en el que ha sido reconocido como MVP. Participa de forma activa en la comunidad, escribiendo su blog, manteniendo un portal sobre Microsoft Azure y colaborando con Microsoft y grupos de usuarios en eventos de formación, talleres y giras de producto.

Deja un comentario

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