Listo... les dejo el código por si alguien mas lo necesita y para que
lo critiquen (así lo mejoramos)

public class NHibernateSessionPerActionAttribute : ActionFilterAttribute
{
        private readonly ISessionFactory sessionFactory;

        public NHibernateSessionPerActionAttribute()
        {
                sessionFactory = 
ServiceLocator.Current.GetInstance<ISessionFactory>();
        }

        public override void OnActionExecuting(ActionExecutingContext 
filterContext)
        {
                base.OnActionExecuting(filterContext);
                sessionFactory.GetCurrentSession().BeginTransaction();
       }

        public override void OnActionExecuted(ActionExecutedContext 
filterContext)
        {
                var session = sessionFactory.GetCurrentSession();
                try
                {
                        session.Transaction.Commit();
                }
                catch (Exception)
                {
                        session.Transaction.Rollback();
                        throw;
                }
                finally
                {
                        session.Dispose();
                }
                base.OnActionExecuted(filterContext);
        }
}


2010/3/23 Fabio Maulo <[email protected]>:
> En MVC hacelo con ActionFilter
>
> El 23 de marzo de 2010 18:59, Nelo Pauselli <[email protected]>
> escribió:
>>
>> Bueno... quizás se podría hacer en unhaddins que la estrategia para
>> determinar si el request debe o no debe tener una session (y
>> transaction) sea por default la que hay ahora pero que sea posible
>> configurarle otra... digo... no se... ¿que piensan los que hacen
>> unhaddins?.... si quieren puedo hacerlo y mandar el patch y ven si les
>> gusta.
>>
>> Nelo
>>
>> 2010/3/23 Gustavo Ringel <[email protected]>:
>> > Cuando tuve el mismo problema y deje de chequear eso porque en
>> > definitiva no
>> > lo necesitaba, tenia el mismo problema de que el handler llegaba como
>> > null.
>> > Gustavo.
>> > 2010/3/23 Diego Jancic <[email protected]>
>> >>
>> >> Ea raro lo ultimo que decís... El HttpContezt.Current.Handler debería
>> >> ser
>> >> del tipo de la página que se esta ejecutando... En realidad del tipo
>> >> autogenerado por asp.net cuando compila el aspx...
>> >> No estoy en una pc como para probarlo, pero definitivamente hay
>> >> otros...
>> >> Si queres abrí el machine.config y ahí están todos...
>> >> Salu2
>> >>
>> >> On 23/03/2010, at 18:17, "José F. Romaniello" <[email protected]>
>> >> wrote:
>> >>
>> >> Lo que pasa es que mirando este código:
>> >> return context != null && context.Handler != null &&
>> >> !(context.Handler is AssemblyResourceLoader) && !(context.Handler is
>> >> DefaultHttpHandler);
>> >>
>> >> Llego a esta conclusión:
>> >>
>> >> Para que el modulo cree la sesión y transacción, el handler del request
>> >> tiene que ser distinto de nulo, no tiene que ser
>> >> AssemblyResourceLoader, y
>> >> no tiene que ser DefaultHttpHandler.... La pregunta vendría a ser "que
>> >> corno
>> >> tiene que ser?"...
>> >>
>> >> En una aplicación asp.net desde cero, en los request comunes a mis
>> >> páginas
>> >> Handler llega con null.
>> >>
>> >> Y tampoco hay un test de esto lo cual me parece raro.
>> >>
>> >> El 23 de marzo de 2010 18:08, Diego Jancic <[email protected]> escribió:
>> >>>
>> >>> El handler lo que esta haciendo es devolver true o false según sea un
>> >>> archivo estático o no... En la versión que pasaste antes se hacia la
>> >>> diferencia mirando la extensión, en el ultimo codigo que mandaste se
>> >>> fija
>> >>> que httphandler de .net se usa para procesar el request, lo cual es
>> >>> mucho
>> >>> mejor...
>> >>> El assemblyresourceloader, lo usan algunas librerías (ej msajax) para
>> >>> enviar archivos estáticos embebidos en dlls, y el default lo que hace
>> >>> es
>> >>> mandar el archivo sin ningún tipo de procesamiento... Por ejemplo las
>> >>> páginas aspx de asp.net (no mvc) usan un PageHandler...
>> >>>
>> >>> En fin, no se para que sirve todo esto... Ustedes sigan con la parte
>> >>> de
>> >>> NH =)
>> >>>
>> >>> On 23/03/2010, at 17:53, "José F. Romaniello" <[email protected]>
>> >>> wrote:
>> >>>
>> >>> private static bool
>> >>> RequestMayNeedIterationWithPersistence(HttpApplication application)
>> >>>             {
>> >>>                     if (application == null)
>> >>>                     {
>> >>>                             return false;
>> >>>                     }
>> >>>
>> >>>                     HttpContext context = application.Context;
>> >>>                     return context != null && context.Handler != null
>> >>> &&
>> >>>                             !(context.Handler is
>> >>> AssemblyResourceLoader) && !(context.Handler is
>> >>> DefaultHttpHandler);
>> >>>             }
>> >>>
>> >>> Yo no entiendo bien la parte del handler...
>> >>>
>> >>> El 23 de marzo de 2010 17:50, Fabio Maulo <[email protected]>
>> >>> escribió:
>> >>>>
>> >>>> Como es la declaración de RequestMayNeedIterationWithPersistence ?
>> >>>>
>> >>>> El 23 de marzo de 2010 14:23, Nelo Pauselli <[email protected]>
>> >>>> escribió:
>> >>>>>
>> >>>>> Hola gente, estoy intentando usar unhaddins para el manejo de
>> >>>>> session
>> >>>>> (per request) en una aplicación ASP.NET MVC, usando el module:
>> >>>>> "uNhAddIns.Web.NHSessionWebModule" y
>> >>>>> "uNhAddIns.Web.SessionEasier.Contexts.WebSessionContext" como
>> >>>>> current_session_context_class
>> >>>>>
>> >>>>> el tema es que el module no inicia la transaccion (ni la session)
>> >>>>> porque el método RequestMayNeedIterationWithPersistence retorna
>> >>>>> false
>> >>>>> ya que el context no tiene handler (=null) en el momento del
>> >>>>> ApplicationBeginRequest. Al hacer el ApplicationEndRequest si ya lo
>> >>>>> tiene al handler y es un System.Web.Mvc.MvcHandler.
>> >>>>>
>> >>>>> ¿alguien tiene alguna idea de que puedo estar haciendo mal?
>> >>>>>
>> >>>>> Gracias!
>> >>>>>
>> >>>>> Saludos.
>> >>>>> Nelo.
>> >>>>>
>> >>>>> --
>> >>>>> Para escribir al Grupo, hágalo a esta dirección:
>> >>>>> [email protected]
>> >>>>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>> >>>>>
>> >>>>> To unsubscribe from this group, send email to
>> >>>>> nhibernate-hispano+unsubscribegooglegroups.com or reply to this
>> >>>>> email with
>> >>>>> the words "REMOVE ME" as the subject.
>> >>>>
>> >>>>
>> >>>>
>> >>>> --
>> >>>> Fabio Maulo
>> >>>>
>> >>>> --
>> >>>> Para escribir al Grupo, hágalo a esta dirección:
>> >>>> [email protected]
>> >>>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>> >>>>
>> >>>> To unsubscribe from this group, send email to
>> >>>> nhibernate-hispano+unsubscribegooglegroups.com or reply to this email
>> >>>> with
>> >>>> the words "REMOVE ME" as the subject.
>> >>>
>> >>> --
>> >>> Para escribir al Grupo, hágalo a esta dirección:
>> >>> [email protected]
>> >>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>> >>>
>> >>> To unsubscribe from this group, send email to
>> >>> nhibernate-hispano+unsubscribegooglegroups.com or reply to this email
>> >>> with
>> >>> the words "REMOVE ME" as the subject.
>> >>>
>> >>> --
>> >>> Para escribir al Grupo, hágalo a esta dirección:
>> >>> [email protected]
>> >>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>> >>>
>> >>> To unsubscribe from this group, send email to
>> >>> nhibernate-hispano+unsubscribegooglegroups.com or reply to this email
>> >>> with
>> >>> the words "REMOVE ME" as the subject.
>> >>
>> >> --
>> >> Para escribir al Grupo, hágalo a esta dirección:
>> >> [email protected]
>> >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>> >>
>> >> To unsubscribe from this group, send email to
>> >> nhibernate-hispano+unsubscribegooglegroups.com or reply to this email
>> >> with
>> >> the words "REMOVE ME" as the subject.
>> >>
>> >> --
>> >> Para escribir al Grupo, hágalo a esta dirección:
>> >> [email protected]
>> >> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>> >>
>> >> To unsubscribe from this group, send email to
>> >> nhibernate-hispano+unsubscribegooglegroups.com or reply to this email
>> >> with
>> >> the words "REMOVE ME" as the subject.
>> >
>> > --
>> > Para escribir al Grupo, hágalo a esta dirección:
>> > [email protected]
>> > Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>> >
>> > To unsubscribe from this group, send email to
>> > nhibernate-hispano+unsubscribegooglegroups.com or reply to this email
>> > with
>> > the words "REMOVE ME" as the subject.
>> >
>>
>> --
>> Para escribir al Grupo, hágalo a esta dirección:
>> [email protected]
>> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>>
>> To unsubscribe from this group, send email to
>> nhibernate-hispano+unsubscribegooglegroups.com or reply to this email with
>> the words "REMOVE ME" as the subject.
>
>
>
> --
> Fabio Maulo
>
> --
> Para escribir al Grupo, hágalo a esta dirección:
> [email protected]
> Para más, visite: http://groups.google.com/group/NHibernate-Hispano
>
> To unsubscribe from this group, send email to
> nhibernate-hispano+unsubscribegooglegroups.com or reply to this email with
> the words "REMOVE ME" as the subject.
>

-- 
Para escribir al Grupo, hágalo a esta dirección: 
[email protected]
Para más, visite: http://groups.google.com/group/NHibernate-Hispano

Responder a