Take care with that implementation...Try it opening two in
depended conversations in two tabs (instead two browser instances).

2009/9/13 danyelleon <[email protected]>

>
> Hi !
>
> I use a custom httpmodule for implement an nhibernate session per
> conversation pattern in my asp.net web proyect. This work fine. I
> recently wants add ajax support for the site, but i recive this error
> in the browser:
>
> Message: ASP.NET Ajax client-side framework failed to load.
> Line: 40
> Char: 34
> Code: 0
> URI: http://localhost/thpcu/prueba.aspx
>
>
> Message: 'Sys' is undefined
> Line: 52
> Char: 1
> Code: 0
> URI: http://localhost/thpcu/prueba.aspx
>
>
> Message: 'Sys' is undefined
> Line: 70
> Char: 1
> Code: 0
> URI: http://localhost/thpcu/prueba.aspx
>
>
>
> the section in web.config for the modules are here:
>
>    <httpModules>
>      <add name="NHibernateSessionPerConversationModule"
> type="Thpcu.Tapi.Web.NHibernateSessionPerConversationModule,
> Thpcu.Tapi.Web"/>
>      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule,
> System.Web.Extensions, Version=3.5.0.0, Culture=neutral,
> PublicKeyToken=31BF3856AD364E35"/>
>    </httpModules>
>
>
> If i coment my custom module, ajax work fine. But whit the module
> active, the error apear. I search in internet but almost all answer
> for this error are for a bad configured web.config file. In my case, i
> use visual studio 2008 that create a full configured web.config for
> support ajax, and i use the 3.5 sp1 framework, that have full suport
> for ajax too.
>
> Why this simple custom module cause the ajax error?
>
> Some help please !
>
> Thanks in advance.
>
> The code for http module:
>
> using System;
> using System.Data;
> using System.Configuration;
> using System.Linq;
> using System.Web;
> using System.Web.Security;
> using System.Web.UI;
> using System.Web.UI.HtmlControls;
> using System.Web.UI.WebControls;
> using System.Web.UI.WebControls.WebParts;
> using System.Xml.Linq;
> using NHibernate.Context;
> using Thpcu.Tapi.Infraestructure;
> using NHibernate;
>
> namespace Thpcu.Tapi.Web
> {
>    public class NHibernateSessionPerConversationModule : IHttpModule
>    {
>        #region Constants
>
>        private const string NHIBERNATE_CONVERSATION_END_FLAG_KEY =
> "hibernate.conversation.end.flag";
>
>        private const string NHIBERNATE_CURRENT_SESSION_KEY =
> "hibernate.session";
>
>        #endregion
>
>        #region Public Methods
>
>        public void Dispose()
>        {
>        }
>
>        public static void EndConversationAtTheEndOfThisRequest()
>        {
>            HttpContext.Current.Items
> [NHIBERNATE_CONVERSATION_END_FLAG_KEY] = true;
>        }
>
>        public void Init(HttpApplication context)
>        {
>            context.PreRequestHandlerExecute += new EventHandler
> (Application_PreRequestHandlerExecute);
>            context.PostRequestHandlerExecute += new EventHandler
> (Application_PostRequestHandlerExecute);
>        }
>
>        #endregion
>
>        #region Private Methods
>
>        private void Application_PreRequestHandlerExecute(object
> sender, EventArgs e)
>        {
>            PerformRequest(true);
>        }
>
>        private void Application_PostRequestHandlerExecute(object
> sender, EventArgs e)
>        {
>            PerformRequest(false);
>        }
>
>        private void PerformRequest(bool begin)
>        {
>            try
>            {
>                if (begin)
>                    Application_BeginRequest();
>                else
>                    Application_EndRequest();
>            }
>            catch (StaleObjectStateException staleEx)
>            {
>                // This implementation does not implement optimistic
> concurrency control!
>                // Your application will not work until you add
> compensation actions!
>                // Rollback, close everything, possibly compensate for
> any permanent changes
>                // during the conversation, and finally restart
> business conversation. Maybe
>                // give the user of the application a chance to merge
> some of his work with
>                // fresh data... what you do here depends on your
> applications design.
>                throw staleEx;
>            }
>            catch (Exception ex)
>            {
>                // Rollback only
>                try
>                {
>                    if (CurrentSessionContext.HasBind
> (StaticSessionManager.SessionFactory))
>                        StaticSessionManager.GetCurrentSession
> ().Transaction.Rollback();
>                }
>                catch
>                {
>                    // Could not rollback transaction after exception!
>                }
>                finally
>                {
>                    // Close the conversation and cleanup
>                    HttpContext.Current.Session
> [NHIBERNATE_CURRENT_SESSION_KEY] = null;
>                    ISession currentSession =
> CurrentSessionContext.Unbind(StaticSessionManager.SessionFactory);
>                    if (currentSession != null)
>                        currentSession.Close();
>                }
>                // Let others handle it...
>                //throw new InfrastructureException(ex);
>            }
>        }
>
>        private void Application_BeginRequest()
>        {
>            // Continuing a conversation?
>            ISession currentSession = (ISession)
> HttpContext.Current.Session[NHIBERNATE_CURRENT_SESSION_KEY];
>            if (currentSession == null)
>            {
>                // New conversation
>                currentSession = StaticSessionManager.OpenSession();
>                currentSession.FlushMode = FlushMode.Never;
>            }
>            CurrentSessionContext.Bind(currentSession);
>            currentSession.BeginTransaction();
>        }
>
>        private void Application_EndRequest()
>        {
>            // Unbinding Session after processing
>            ISession currentSession = CurrentSessionContext.Unbind
> (StaticSessionManager.SessionFactory);
>
>            // End or continue the long-running conversation?
>            if (HttpContext.Current.Items
> [NHIBERNATE_CONVERSATION_END_FLAG_KEY] != null)
>            {
>                currentSession.Flush();
>                currentSession.Transaction.Commit();
>                currentSession.Close();
>                HttpContext.Current.Session
> [NHIBERNATE_CURRENT_SESSION_KEY] = null;
>                HttpContext.Current.Response.Redirect
> (HttpContext.Current.Request.CurrentExecutionFilePath);
>
>            }
>            else
>            {
>                currentSession.Transaction.Commit();
>                HttpContext.Current.Session
> [NHIBERNATE_CURRENT_SESSION_KEY] = currentSession;
>            }
>        }
>
>        #endregion
>    }
> }
>
> >
>


-- 
Fabio Maulo

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to