65.9K
CodeProject 正在变化。 阅读更多。
Home

如何设置 ASP.NET 应用程序以使用状态服务器或 SQL Server 会话管理

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.39/5 (10投票s)

2009年10月21日

CPOL

4分钟阅读

viewsIcon

77300

如何设置状态服务器和 SQL Server 进行会话管理。

引言

这是一篇 101 级别的文章。在本文中,我们将探讨如何进行 SQL Server 会话管理或状态服务器的基础知识。我将假设读者仅了解如何使用 SQL Server Management Studio 以及如何为 Web 应用程序项目使用 Visual Studio。

我之所以深入撰写本文,是因为最近一些刚毕业的开发人员在配置这些东西时遇到了一些问题,这让我意识到,尽管我们有丰富的相关信息,但它可能并不适合所有人。

ASP.Net 会话管理

ASP.NET 有一个会话的概念。这意味着在 Web 服务器调用之间,您可以临时存储一些数据,然后在下一次调用返回到服务器时检索它。

有人可能会问,这为什么重要?您存储一个变量然后又取回它。之所以重要,是因为 HTTP 协议是无状态的。这意味着每次调用 Web 服务器时,都好像是新的调用。ASP.NET 为我们提供了一种机制,通过它,您可以编写非常简单的代码

Session["UserName"] ="Joe"; 来写入会话

userName = (String) Session["UserName"]; 来从会话读取

要求写入会话的任何内容都必须是可序列化的,以便它可以传输到网络或存储在数据库中。

MSDN 上的此链接是开始 ASP.NET 会话管理的一个好资源。

ASP.NET 允许我们通过三种方式存储会话:

  1. 内存中 - 默认方式。在此机制中,会话信息存储在 Web 服务器上。这速度非常快,但它不是一种非常可靠的方法。
  2. 状态服务器 - 在此机制中,使用 Windows 服务来存储会话信息。应注意,每个服务器场中应只运行一个状态服务器实例,以便共享会话。状态服务器作为 .NET Framework 安装的一部分安装。相应的服务名称为“ASP.NET State Service”。状态服务器比内存中更可靠,因为即使其中一个 Web 服务器发生故障(假设不是执行状态服务器的服务器),网站仍然可以正常工作,因为会话不会丢失。此机制比内存中慢,因为数据必须跨服务器传输。
  3. SQL Server 会话管理 - 在此机制中,会话存储在 SQL Server 中。对于 2005 及更高版本,SQL Server 可以是 Express 到 Enterprise 的任何版本。此机制最可靠,因为我们使用 SQL Server 存储会话信息。它还允许在不使用会话时释放内存。然而,它是所有机制中最慢的,因为它需要额外的访问 SQL Server 的成本。

应注意,在状态服务器和 SQL Server 的情况下,会话结束事件(我们在 *Global.asax* 中编写的那个)不会被触发。

有人可能会争辩说存在编写自定义提供程序的备选机制,但我们现在将忽略它们。

我将假设对于本文,您知道如何使用会话变量,如果不知道,那么此链接此链接将很有帮助。

内存中的会话管理是默认提供的,不需要额外的努力。另一方面,如果我们选择状态服务器或 SQL Server,则将涉及以下步骤:

涉及的步骤

  1. 创建一个带有会话管理架构的 SQL Server 数据库或启动状态管理服务。
  2. 更新 web.config

启动状态管理服务器

要使用状态管理服务器,我们需要在计算机上安装 .NET Framework。要启动服务器,我们需要执行以下步骤:

  1. 转到运行。
  2. 键入 Services.msc(对于 XP / Windows 2003 及更高版本,您需要以管理员身份运行此命令)。
  3. 启动 ASP.NET State Service。

或者

  1. 转到运行。
  2. 键入 Net Start aspnet_state aspstate (具体取决于情况)。

请注意以下几点:

  1. 这只需要在服务器场的一台计算机上完成。
  2. 请记下服务器的计算机名称/IP 地址。

设置用于会话管理的 SQL Server 数据库

  1. 打开 SQL Server Management Studio 并以管理员身份登录

    001.png

  2. 在对象资源管理器中的数据库节点上右键单击

    002.png

  3. 单击新建数据库

    003.png

  4. 添加一个数据库名称

    004.png

  5. 单击确定,将创建一个空数据库
    1. 在刚刚创建的数据库上运行脚本 C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallSqlState.sql
    2. C:\Windows\Microsoft.NET\Framework\v2.0.50727\InstallSqlStateTemplate.sql

    这会设置数据库服务器。

更新 Web.config

最后,需要更新 web.config,以便会话可以使用所需的提供程序。

如果您想使用状态服务器,则进行以下条目:

<sessionState mode="StateServer" stateConnectionString="tcpip=<My Server Name>:42424" 
	cookieless="<True or False depending if you want to keep session Id in 
	cookie or in the url>" timeout="<an integer in minutes>" />

例如

<sessionState mode="StateServer" stateConnectionString="tcpip=StateServer:42424" 
	cookieless="true" timeout="10 />

另一方面,如果您想使用 SQL Server,则将以下内容添加到 web.config

<sessionState mode="SqlServer" sqlConnectionString="<a valid connection string>" 
	cookieless="="<True or False depending if you want to keep session Id 
	in cookie or in the url>" timeout="<an integer in minutes>" /> 
<sessionState mode="SqlServer" sqlConnectionString="data source=MyStateServer;
	user id=sa; password=sa" cookieless="false" timeout="10" /> 

这里是一个了解连接字符串的好地方。

希望这有帮助。

历史

  • 2009 年 10 月 20 日:初次发布
© . All rights reserved.