public class ExampleSessionModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest += OpenSession;
context.EndRequest += CloseSession;
}
private void OpenSession(object sender, EventArgs e)
{
ExampleSessionProvider.Instance.OpenSession();
}
private void CloseSession(object sender, EventArgs e)
{
ExampleSessionProvider.Instance.CloseSession();
}
public void Dispose()
{
}
}
The you just need a session provider.
public class ExampleSessionProvider
{
private const string SESION_KEY = "SESSION_KEY";
private ExampleSessionProvider()
{
}
private static ExampleSessionProvider instance;
public static ExampleSessionProvider Instance
{
get
{
if (instance == null)
{
instance = new ExampleSessionProvider();
}
return instance;
}
}
private ISessionFactory sessionFactory;
public void CreateSessionFactory()
{
sessionFactory = Fluently.Configure();
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
// add more configuration options above !!!
}
public ISession GetSession()
{
if (HttpContext.Current != null)
{
return sessionFactory.GetCurrentSession();
}
return null;
}
public ISession OpenSession()
{
ISession session = sessionFactory.OpenSession();
ManagedWebSessionContext.Bind(HttpContext.Current, session);
return session;
}
public void CloseSession()
{
ISession session = ManagedWebSessionContext.Unbind(HttpContext.Current, sessionFactory);
if (session != null)
{
if (session.Transaction != null &&
session.Transaction.IsActive)
{
session.Transaction.Rollback();
}
else
{
session.Flush();
}
session.Close();
}
}
private static void BuildSchema(Configuration config)
{
config.SetProperty("current_session_context_class", "managed_web");
}
}
And a bit of web.config configuration:
<system.web> <httpModules> <add name="ExampleSessionModule" type="Example.Session.ExampleSessionModule, Example" /> </httpModules> </system.web>
OR (depending on IIS version)
<system.webServer> <modules> <add name="ExampleSessionModule" type="Example.Session.ExampleSessionModule, Example" /> </modules> </system.webServer>
Last thing to do is to create session factory in Application Start event.
protected void Application_Start(Object sender, EventArgs e)
{
ExampleSessionProvider.Instance.CreateSessionFactory();
}
No comments:
Post a Comment