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