Nhibernate y WCF – Parte 2

Buenas con todos,  esta es la continuación del post “Nhibenate y WCF – Parte 1” quedaron muchas cosas pendientes en el tintero y espero que esta 2da parte ayude mucho más.

Previo:

Hace unas semana Fabio Maulo, Team Leader de Nhibernate publicó en su blog un post donde incorpora una nueva feature al proyecto uNhAddins para Aplicaciones WCF, Esta nueva feature nos ahorra mucho trabajo al usar Nhibernate y WCF y soluciona el problema que por ejemplo a mí se me presento y cuyo fin es este post. Espero en unos días próximos usar esta feature e incorporarlo a mi proyecto demo y claro postearlo también.

Previo: Cuando construimos una aplicación web y decidimos usar Nhibernate como Capa de Persistencia, Nhibernate nos provee de una configuración para optimizar su uso en una aplicación bajo la web, esta configuración esta presente en la propiedad:

image

Esto en la sección de configuración de Nhibernate, Implementando el patrón de Session per request, Creamos una Sesión de Nhibernate por cada request que se hace a la aplicación , para más detalles en darle una mirada a la Clase NhibernatHelper en este post; todo esto en una aplicación web , Pero un servicio WCF no funciona de la misma manera, es decir en un servicio no puede tomar el objeto HttpContext para encapsular dentro de él a la sesión de Nhibernate. Un servicio no tiene un HttpContext , un servicio más bien un Contexto de Operación, es decir cada vez que un servicio sea consumido se creará una Sesión, y se encapsulara la sesión de nhibernate en esa Operación.

En el post de Fabio, Él implementa todo eso el misma propiedad donde se configura a la aplicación como “web”, En este post, se hace a mano.

NhibernateContext: Esta implementación le pertenece a Donald Belcham en su post podrán la descripción de la implementación en ingles.

Clase utilizadas para la implementación del Atributo: [NhibernateContext]

image

NhibernateContext:

image

NhibernateContextExtension:

image

NhibernateContextInitializer:

Aquí es importante mencionar que cada vez que se usar un servicio se inicializa el Contexto de la Operación y por consiguiente se Abre una crea una sesión de Nhibernate.

image

Atributto: NhibernateContextAttibute

image

Cambiando nuestro NhibernateHelper: con estas líneas de código solo estamos haciendo que nuestro Helper funcione solo con los servicios, para hacer que nuestro helper trabaje con la Aplicación Web y los Servicios darle una mirada a la demo colgada en codeplex

image

Aplicando el Atributo  a los servicios dentro del Contexto

image

Implementando:

image

Espero les haya gustado el post, y regreso con la Tercera parte.

Saludos desde Lima, Perú.

José Fabricio Rojas


About this entry