Are all your entities serializable ?
2008/12/4 Mike O <[EMAIL PROTECTED]>
>
> Hi everyone,
>
> Is anyone aware of an issue trying to save an NHibernate session in
> ASP.NET application using sqlserver as the session state mode? When
> using inProc session state everything works fine, but when sql server
> is used to manage state the application bombs out with the following
> error:
>
> "Unable to serialize the session state. In 'StateServer' and
> 'SQLServer' mode, ASP.NET will serialize the session state objects,
> and as a result non-serializable objects or MarshalByRef objects are
> not permitted. The same restriction applies if similar serialization
> is done by the custom session state store in 'Custom' mode."
>
> Any ideas or thoughts would be really helpful. Thanks. Code below:
>
> ----------- Session Manager -------------
> [Serializable]
> public class StaticSessionManager
> {
> public static readonly ISessionFactory SessionFactory;
>
> static StaticSessionManager()
> {
> try
> {
> var cfg = new NHibernate.Cfg.Configuration();
>
> if (SessionFactory != null)
> throw new Exception("trying to init SessionFactory
> twice!");
>
> SessionFactory = cfg.Configure().BuildSessionFactory
> ();
> }
> catch (Exception ex)
> {
> Console.Error.WriteLine(ex);
> throw new Exception("NHibernate initialization
> failed", ex);
> }
> }
>
> public static ISession OpenSession()
> {
> return SessionFactory.OpenSession();
> }
> }
>
> -------------------HttpModule----------------
> public class NHibernateSessionPerConversationModule : IHttpModule
> {
>
> #region Constants
>
> const string NHIBERNATE_CONVERSATION_END_FLAG_KEY =
> "hibernate.conversation.end.flag";
>
> const string NHIBERNATE_CURRENT_SESSION_KEY =
> "hibernate.session";
>
> #endregion
>
> #region Public Methods
>
> public void Dispose()
> {
> }
>
> public static void SetEndConversationFlag()
> {
> HttpContext.Current.Items
> [NHIBERNATE_CONVERSATION_END_FLAG_KEY] = true;
> }
>
> public void Init(HttpApplication context)
> {
> context.PreRequestHandlerExecute += new EventHandler
> (Application_BeginRequest);
> context.PostRequestHandlerExecute += new EventHandler
> (Application_EndRequest);
> }
>
> #endregion
>
> #region Private Methods
>
> private void Application_BeginRequest(object sender, EventArgs
> e)
> {
> ISession currentSession;
> if (HttpContext.Current.Session != null)
> {
> currentSession = (ISession)HttpContext.Current.Session
> [NHIBERNATE_CURRENT_SESSION_KEY];
> if (currentSession == null)
> {
> currentSession = StaticSessionManager.OpenSession
> ();
> currentSession.FlushMode = FlushMode.Never;
> }
> }
> else
> {
> currentSession = StaticSessionManager.OpenSession();
> currentSession.FlushMode = FlushMode.Never;
> }
> CurrentSessionContext.Bind(currentSession);
> currentSession.BeginTransaction();
> }
>
> private void Application_EndRequest(object sender, EventArgs
> e)
> {
> ISession session = CurrentSessionContext.Unbind
> (StaticSessionManager.SessionFactory);
>
> if (HttpContext.Current.Items
> [NHIBERNATE_CONVERSATION_END_FLAG_KEY] != null)
> {
> session.Flush();
> session.Transaction.Commit();
> session.Close();
> HttpContext.Current.Session
> [NHIBERNATE_CURRENT_SESSION_KEY] = null;
> }
> else
> {
> session.Transaction.Commit();
> if (HttpContext.Current.Session != null)
> {
> HttpContext.Current.Session
> [NHIBERNATE_CURRENT_SESSION_KEY] = session;
> }
> }
>
> }
>
> >
>
--
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
-~----------~----~----~----~------~----~------~--~---