ASP.NET的会话状态(二)

原创 2005年05月15日 01:25:00
四, 状态提供 (State Providers)
       默认情况下, 应用程序将会话状态存放在辅助进程 (aspnet_wp.exe) 中, 更确切地说, 它被存在 Cache 对象的私有存储槽 (slot) 当中, 且不能用编程的方法来访问, 即使你枚举ASP.NET数据缓存中的所有内容, 也
不会看到和会话状态有关的任何东西. Cache 对象有两个存储槽, 程序员仅仅允许操纵公有的存储槽.  每一个活动的会话状态占用一个私有存储槽, 存储槽以会话 ID 命名, 值是一个叫做 SessionStateItem类的对象, InProc State Provider 通过会话ID从缓存中取得相应的对象, 然后, essionStateItem对象的内容被传送到 HttpSessionState 对象中, 并可通过 Session 属性访问.
       目前为止, 就访问来说, InProc方式是最快的, 但是要雇的是, 你在会话当中存的数据越多, 服务器花费的内存也越多, 这会影响应用的性能. 如果你打算使用进程外的解决方案, 也要考虑序列化和反序列化带来的影响.
将会话状态存放在外部进程或数据库中都会存在这样的问题, 这样的操作在每一次请求被处理的时候都会发生. 使用进程外存储使得你的会话状态存活的时间更长, 并且使得应用更为健壮, 因为它不会因为IIS或辅助进程的失败而受到影响.
       如果你打算使用 State Server 方式, 你必须在应用启动前打开 ASP.NET State Service 这个系统服务,它随.NET一起安装, 但并不自动运行, 需要手动来启动驼, 它是一个叫做 aspnet_state.exe 的进程. 除此之外,
还要在 web.config 文件中配置运行该服务的主机 IP 地址及 TCP 端口号:

   <system.web>
        <sessionState
            mode="StateServer"
            stateConnectionString="tcpip=<hostname>:42424" />
    </system.web>

在 stateConnectionString 后面填入运行该进程的主机 IP, 默认为 127.0.0.1, 端口号是强制的. 这样一来,不管辅助进程发生了什么问题, 会话状态将永远在那里, 如果服务暂停, 数据会被保留, 而且在服务恢复的时候重新被取回, 但如果服务进程停止或失败了, 则数据将会丢失. 注意可以用主机名代替IP, 但只能使用合法的 ASCII 字符.
       当健壮性对于你的应用程序来说非常关键的时候,  可以使用 SQLServer 模式:
 
     <system.web>
        <sessionState
            mode="SQLServer"
            sqlConnectionString="server=127.0.0.1;uid=<user id>;pwd=<password>;" />
    </system.web>

  必须在 sqlConnectionString 中指定连接字符串, 注意地是这里必须包含用户名, 密码, 服务器名, 它不能包含   如 Database, Initial Catalog 这样的符号, 因为它们的名字默认已经被固定了, 当然用户名和密码可以改为使用
ntegrated Security, 即使用 windows 的集成安全验证. 
       那么怎样创建数据库呢? ASP.NET 使用两对脚本来配置数据库环境, 每一对是 InstallSqlState.sql 和 UninstallSqlState.sql 它们创建了一个叫 ASPSate 的数据库和一些存储过程, 并且存放在 tempDB 下面, 这是一个临时数据库, 意味着如果服务器重启, 数据将会丢失. 要取消这个限制, 可以使用第二对脚本, 它们是 InstallPersistSqlState.sql 和 UninstallPersistSqlState.sql.,这个数据库将是持久的, 在创建这个数据库的同时, 还会建立一个任务, 它用来在数据库中删除过期的会话, 它的名字叫
ASPState_Job_DeleteExpiredSessions, 会每分钟运行一次, 这个任务需要 SQLServerAgent 服务的支持.
       不管你选用哪种模式, 编程的方法是不变的, 所有的细节都在底层被处理了,  也许序列化是这几种模式之间最重要的区别.


 

asp.net 会话状态

  • 2012年11月03日 11:06
  • 43KB
  • 下载

在asp.net中实现会话状态基础

  • 2007年10月17日 13:11
  • 20KB
  • 下载

实现ASP.net会话状态存储提供者

本文描述了一个自定义的会话状态存储提供者实现并示范一个范例提供者的实例。 ASP.NET 会话状态是为了简化 ASP.NET 应用程序在不同的源中存储用户会话数据而被设计的。默认时,会话状态的值和...
  • zyb507
  • zyb507
  • 2013年12月31日 10:41
  • 576

ASP.NET常用信息保持状态学习笔记二

2012-05-11 22:06   3、Session          Session数据保存在服务器端中。每个客户端的相关session都独立存储,因为SessionId以coo...
  • YunanWu
  • YunanWu
  • 2012年11月16日 19:59
  • 536

如何在传统 ASP 和 ASP.NET 之间共享会话状态

如何在传统 ASP 和 ASP.NET 之间共享会话状态
  • lee576
  • lee576
  • 2011年03月03日 16:44
  • 972

无法向会话状态服务器发出会话状态请求 没有启动 ASP.NET State service错误的解决方法

最近由于需要,又把放下的dotnet重新拾了起来。结果刚引了一个网站就报错如下:无法向会话状态服务器发出会话状态请求。请确保已启动 ASP.NET State service,并且客户端和服务器端口是...

无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (AS...

无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (AS... 无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Serv...

获取ASP.NET下载状态

  • 2015年05月07日 10:46
  • 5.69MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET的会话状态(二)
举报原因:
原因补充:

(最多只允许输入30个字)