参考:http://www.cnblogs.com/renrenqq/archive/2006/08/04/467688.html

但这个方法还不能解决Session缓存问题,由于创建Session需要消耗大量的内存,参考上面的方法,当请求并发的时候,内存不断的增加。

在网上找了很多种方法都没有解决。下面贴上主要代码:

1、接口请参考上面文章

using NHibernate;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web; namespace XiaoRui.Data.NhibernateProvider
{ /// <summary>
/// Http Session管理
/// </summary>
class HttpSessionSource : ISessionStorage
{
private string name;
private ISession session; /// <summary>
///
/// </summary>
/// <param name="name">session名称</param>
public HttpSessionSource(string name)
{
this.name = name;
} /// <summary>
/// 获得ISession
/// </summary>
/// <returns>获得的ISession</returns>
public ISession Get()
{
// 很多人使用下面的方法,但内存占用很大
// session = HttpContext.Current.Items[name] as ISession; //使用Cache缓存
session = HttpContext.Current.Cache[name] as ISession; if (session != null)
{
// 这里很重要
return session.SessionFactory.OpenSession();
} return session;
} /// <summary>
/// 保存ISession
/// </summary>
/// <param name="value">需要保存的ISession</param>
public void Set(ISession value)
{
if (value != null && !HttpContext.Current.Items.Contains(name))
{
//HttpContext.Current.Items.Add(name, value);
HttpContext.Current.Cache.Insert(name, value);
}
else
{
HttpContext.Current.Items.Remove(name);
}
} public string Name
{
get
{
return this.name;
}
set
{
this.name = value;
}
} }
}

2、主要从Session管理者获取Session

using NHibernate;
using NHibernate.Cfg;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml; namespace XiaoRui.Data.NhibernateProvider
{
/// <summary>
/// session管理者
/// </summary>
class SessionManager
{
private static ISessionStorage storage; //Session工厂
public static ISessionStorage SessionStorage
{
get { return storage; }
} public SessionManager(string name)
{
storage = ISessionStorageFactory.GetSessionStorage(name);
} /// <summary>
/// 获取Session
/// </summary>
/// <returns></returns>
public ISession GetSession()
{
ISession session = storage.Get();
if (session == null)
{
session = CreateSession();
storage.Set(session);
} return session;
} /// <summary>
/// 创建Session
/// </summary>
/// <returns></returns>
private ISession CreateSession()
{
Configuration config = new Configuration();
config.Configure(storage.Name);
ISession result = config.BuildSessionFactory().OpenSession();
result.FlushMode = FlushMode.Always;
return result;
} }
}

Nhibernate的Session管理的更多相关文章

  1. NHibernate系列文章十七:NHibernate Session管理(附程序下载)

    摘要 NHibernate的Session的管理涉及到NHibernate的两个最重要的对象ISessionFactory和ISession.ISessionFactory的生成非常消耗资源,通常都在 ...

  2. NHibernate中Session的处理 线程不安全

    NHibernate中Session是线程不安全的,而且每次数据库操作 请求创建Session时对性能有些影响.在Windows应用中可以通过 [ThreadStatic]特性很简单的就可以实现线程安 ...

  3. Openfire的启动过程与session管理

    说明   本文源码基于Openfire4.0.2.   Openfire的启动       Openfire的启动过程非常的简单,通过一个入口初始化lib目录下的openfire.jar包,并启动一个 ...

  4. ABP(现代ASP.NET样板开发框架)系列之7、ABP Session管理

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之7.ABP Session管理 ABP是“ASP.NET Boilerplate Project (ASP.NET ...

  5. 2016-1-30 Servlet中Session管理(Sesssion追踪)

    Session管理(Sesssion追踪)是Web应用程序开发中非常重要的一个主题.这是因为HTTP是无状态的,在默认情况下,Web服务器不知道一个HTTP请求是来自初次用户,还是来自之前已经访问过的 ...

  6. Redis3.2+Tomcat实现集群的Session管理 -- tomcat-redis-session-manager的编译和开发部署环境搭建

    已经有不少文章介绍使用tomcat-redis-session-manager来实现Redis存储Tomcat的Session,实现分布式Session管理.但是现在官方编译的tomcat-redis ...

  7. tomcat架构分析 (Session管理)

    Session管理是JavaEE容器比较重要的一部分,在app中也经常会用到.在开发app时,我们只是获取一个session,然后向session中存取数据,然后再销毁session.那么如何产生se ...

  8. Session管理解决方案笔记

    大型网站Session管理解决方案: 1. web服务器之间的session复制.    优点:方案成熟    缺点:复制的性能开销大 2. 减少session使用,使用客户端存储cookie     ...

  9. 使用Memcached Session Manager扩展Session管理

    >>Tomcat的session管理 在请求过程中首先要解析请求中的sessionId信息,然后将sessionId存储到request的参数列表中. 然后再从request获取sessi ...

随机推荐

  1. 2015 西雅图微软总部MVP峰会记录

    2015 西雅图微软总部MVP峰会记录 今年决定参加微软MVP全球峰会,在出发之前本人就已经写这篇博客,希望将本次会议原汁原味奉献给大家 因为这次是本人第一次写会议记录,写得不好的地方希望各位园友见谅 ...

  2. 利用SQLServer数据库发送邮件

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 这个应用案例很多,一般都是预警,比如异常连接的时候,或者数据库报错的时候.等等,,, 先 ...

  3. Nhibernate的Session管理

    参考:http://www.cnblogs.com/renrenqq/archive/2006/08/04/467688.html 但这个方法还不能解决Session缓存问题,由于创建Session需 ...

  4. CRL快速开发框架系列教程十一(大数据分库分表解决方案)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  5. 从netty-example分析Netty组件续

    上文我们从netty-example的Discard服务器端示例分析了netty的组件,今天我们从另一个简单的示例Echo客户端分析一下上个示例中没有出现的netty组件. 1. 服务端的连接处理,读 ...

  6. Kooboo CMS技术文档之一:Kooboo CMS技术背景

    语言平台 依赖注入方案 存储模型 1. 语言平台 Kooboo CMS基于.NET Framework 4.x,.NET Framework 4.x的一些技术特性成为站点开发人员使用Kooboo CM ...

  7. WebApi返回Json格式字符串

    WebApi返回json格式字符串, 在网上能找到好几种方法, 其中有三种普遍的方法, 但是感觉都不怎么好. 先贴一下, 网上给的常用方法吧. 方法一:(改配置法) 找到Global.asax文件,在 ...

  8. LINQ to SQL Select查询

    1. 查询所有字段 using (NorthwindEntities context = new NorthwindEntities()) { var order = from n in contex ...

  9. bzoj3932--可持久化线段树

    题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...

  10. 信息安全-2:python之hill密码算法[原创]

    转发注明出处:http://www.cnblogs.com/0zcl/p/6106513.html 前言: hill密码算法我打算简要介绍就好,加密矩阵我用教材上的3*3矩阵,只做了加密,解密没有做, ...