background image

Global.asax   

或 Web.config 

 

文件。  更改到 Web 

 

应用程序的 \Bin 目录。  用杀毒

 

软件扫描并修改 Global.asax 文件、Web.config 

 

文件或 Web 

 

应用程序的 \Bin 目录下的

 

文件。  如果在应用程序的 Web.config 

 

文件的 元素中启用了网络园模式,请不要使用

进程内会话状态模式。否则将发生随机数据丢失。  在进程外模式中,.NET 状态服务器
不是保留活动对象,而是将会话状态存储在内存中。在这种模式中,辅助进程直接与状态

 

服务器对话。在 SQL 

 

模式中,会话状态存储在 SQL Server 数据库中,辅助进程直接与 

SQL 对话。ASP.NET 

 

辅助进程这时能够利用该简单的存储服务,方法是在每个 Web 请求

 

结束时在客户端的 Session 

 

集合中(使用 .NET 序列化服务)序列化并保存所有对象。当

 

客户端重新访问服务器时,相关的 ASP.NET 辅助进程从状态服务器中以二进制流的形式
检索这些对象,将它们反序列化为实时实例,并将它们放置回对请求处理程序公开的新 
Session 

 

集合对象。  在 SQL 模式中,也可以将会话状态配置为在故障转移群集中工

 

作。故障转移群集是两个或更多相同的冗余 Web 服务器,它们将会话数据存储在一台单

 

独的计算机上的 SQL Server 

 

数据库中。有关如何设置此配置的信息,请参见配置 SQL 

Server 模式。  通过有效地将会话数据的存储与应用程序对它的使用分开, ASP.NET 

 

支持许多功能强大的方案,而这些方案对于 ASP 的早期版本是不可用的:  因为用于

 

会话状态的内存不在 ASP.NET 辅助进程中,所以可以实现从应用程序故障的恢复。 
因为所有状态与个别辅助进程不存储在一起,所以如果由于访问冲突导致进程故障,或者

 

在出现死锁或内存泄漏的情况下进程被 IIS 管理服务强行重新启动,状态也不会丢失。 
跨多个辅助进程对应用程序进行分区。  因为所有状态与辅助进程不存储在一起,您可
以干净地跨多个进程对应用程序进行分区。这种分区可以显著地提高多个进程的计算机上
应用程序的可用性和可缩放性。此外,因为它将每个辅助进程与单个计算机关联起来,所

 

以 ASP.NET 

 

能够消除跨处理器锁争用,这是 ASP 早期版本中主要的可缩放性瓶颈之一。 

跨多个网络场计算机对应用程序进行分区。  因为所有状态与辅助进程不存储在一起,
所以您可以跨运行于多个计算机上的多个辅助进程对应用程序进行分区。我们有时需要在
运行于不同计算机上的辅助进程和状态服务间传达状态,有时需要在运行于相同计算机上
的进程和服务器间传达状态,而这两种传达状态的模型几乎是相同的。不管是哪种情况,

 

每个网络场只能有一个状态服务器。  会话状态结构  基于 ASP.NET 的应用程序使

 

用基于事件的执行组织启用多个 .NET Framework 

 

类模块来参与单个 Web 请求的处理。 

SessionState   模 块     .NET   Framework  

 

通 过 SessionStateModule   类 ( 从 

IHttpModule 

 

派生)实现会话状态,该类参与基于 .NET 的应用程序所接收的每个请求

的执行。SessionStateModule 

 

负责生成或获得唯一的 SessionID 字符串,并负责存储状

态数据和从外部状态提供程序检索状态数据。  会话状态集合   SessionState 类公
开两个状态集合:Contents   

和 StaticObjects。Contents 集合公开已直接通过代码添加

到会话状态集合的所有变量项。例如:  [Visual Basic]  ' Visual Basic code from 
within a page, a handler, or Global.asax.     Session("Message") = "MyMsg"  
Session("AppStartTime") = Now  [C#]  // C# code from within a page, a 
handler,   or   Global.asax.

 

 

Session["Message"]   =   "MyMsg";

 

Session["AppStartTime"] = DateTime.Now;

 

  为了与 ASP 的早期版本兼容,还可

 

以通过应用程序对象上的 Contents 属性访问这些值,如下面的示例所示。  [Visual 
Basic]     ' Visual Basic code from within a page, a handler, or Global.asax.  
Session.Contents("Message") = "MyMsg"  Session.Contents("AppStartTime") 
= Now  [C#]  // C# code from within a page, a handler, or Global.asax. 
Session.Contents["Message"]

 

=

 

"MyMsg";

 

Session.Contents["AppStartTime"] = DateTime.Now;  StaticObjects 集合公开