本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
通过 Amazon DynamoDB 管理 ASP.NET 会话状态
本主题中的信息特定于基于 .NET 框架和Amazon SDK for .NET版本 3.3 及更早版本。
本主题特定于 ASP.NET;本主题中的信息不一定适用于 ASP.NET Core。
ASP.NET 应用程序通常在内存中存储会话状态数据。但是,此方法不能很好地扩展。一旦应用程序的增长超出单个 Web 服务器,就必须在服务器之间共享会话状态。一个常用解决方案就是使用 Microsoft SQL Server 设置专用的会话状态服务器,但该方法同样存在一些缺点:必须管理另一台计算机;会话状态服务器会导致单点故障;并且会话服务器本身也会成为性能瓶颈。
DynamoDB
不论您选择哪种解决方案,请注意 Amazon DynamoDB 对项目大小实施了一些限制。您存储在 DynamoDB 中的任何记录都不能超过该限制。有关更多信息,请参阅 。DynamoDB 中的限制在 Amazon DynamoDB 开发人员指南中。
Amazon SDK for .NET包括 AWS.SessionProvider.dll
,其中包含 ASP.NET 会话状态提供程序。它还包括AmazonDynamoDBSessionProviderSample示例演示了如何使用 Amazon DynamoDB 作为会话状态提供程序。
有关针对 ASP.NET 应用程序使用会话状态的更多信息,请转到微软文档
创建 ASP.NET_SessionState 表
当您的应用程序启动时,它会查找默认名称为的 Amazon DynamoDB 表。ASP.NET_SessionState
. 建议您在首次运行应用程序之前创建该表。
创建 ASP.NET_SessionState 表
-
选择 Create Table (创建表)。此时会打开 Create Table 向导。
-
在 Table name 文本框中,输入
ASP.NET_SessionState
。 -
在 Primary key 字段中,输入
SessionId
并将类型设置为String
。 -
根据需要输入所有选项后,选择 Create。
当状态从 ASP.NET_SessionState
变为 CREATING
时,ACTIVE
表已可供使用。
如果您决定不预先创建表,则会话状态提供程序将在其初始化期间创建该表。有关用作会话状态表配置参数的属性列表,请参阅以下 web.config
选项。如果由提供程序创建表,它会使用这些参数。
配置会话状态提供程序
配置 ASP.NET 应用程序以使用 DynamoDB 作为会话状态服务器
-
将对
AWSSDK.dll
和AWS.SessionProvider.dll
的引用添加到您的 Visual Studio ASP.NET 项目中。这些组件可以通过NuGet 包或者手动安装程序集.在开发工具包的早期版本中,会话状态提供程序的功能包含在
AWS.Extension.dll
中。为了提高可用性,该功能已转移到AWS.SessionProvider.dll
中。有关更多信息,请参阅博客帖子。AWS.Extension
重命名. -
编辑应用程序的
Web.config
文件。在system.web
元素中,使用以下 XML 片段替换现有sessionState
元素:<sessionState timeout="20" mode="Custom" customProvider="DynamoDBSessionStoreProvider"> <providers> <add name="DynamoDBSessionStoreProvider" type="Amazon.SessionProvider.DynamoDBSessionStateStore" AWSProfileName="{profile_name}" Region="us-west-2" /> </providers> </sessionState>
配置文件代表Amazon用来与 DynamoDB 通信以存储和检索会话状态的凭证。如果您使用Amazon SDK for .NET并且正在
appSettings
你的应用程序的部分Web.config
文件中,无需在providers
部分;Amazon.NET 客户端代码将在运行时搜索它。有关更多信息,请参阅 。配置您的Amazon SDK for .NET应用程序.如果 Web 服务器运行在 Amazon EC2 实例上,而该实例配置为使用 EC2 实例的 IAM 角色,则您无需在
Web.config
文件。在这种情况下,Amazon.NET 客户端将使用 IAM 角色凭证。有关更多信息,请参阅使用 IAM 角色授予访问权限和安全注意事项。
Web.config 选项
您可以使用 providers
文件的 Web.config
部分中的以下配置属性:
- AWSAccessKey
-
要使用的访问密钥 ID。可以在
providers
或appSettings
部分中设置。我们建议不要使用此设置,而是使用AWSProfileName
指定配置文件来指定凭证。 - AWSSecretKey
-
要使用的私有密钥。可以在
providers
或appSettings
部分中设置。我们建议不要使用此设置,而是使用AWSProfileName
指定配置文件来指定凭证。 - AWSProfileName
-
与您要使用的凭证关联的配置文件名称。有关更多信息,请参阅 。配置您的Amazon SDK for .NET应用程序.
- 区域
-
必需的
string
属性。这些区域有:Amazon使用 Amazon DynamoDB 的区域。查看列表Amazon地区,请参阅区域和终端节点:DynamoDB。 - 应用程序
-
可选
string
属性。Application
属性的值用于对表中的会话数据进行分区,这样表可以用于多个应用程序。 - 表
-
可选
string
属性。用于存储会话数据的表的名称。默认为ASP.NET_SessionState
。 - ReadCapacityUnits
-
可选
int
属性。在提供程序创建表时使用的读取容量单位。默认值为 10。 - WriteCapacityUnits
-
可选
int
属性。在提供程序创建表时使用的写入容量单位。默认 为 5。 - CreateIfNotExist
-
可选
boolean
属性。CreateIfNotExist
属性控制在不存在表的情况下提供程序是否将自动创建表。默认值为 true。如果此标志设置为 false,且表不存在,则会引发异常。
安全考虑因素
创建 DynamoDB 表并配置应用程序之后,会话可以用于任意其他会话提供程序。
作为安全最佳实践,我们推荐您使用 IAM 用户指南用户的凭证运行应用程序。您可以使用IAM 管理控制台
会话状态提供程序需要能够为存储会话数据的表调用 DeleteItem、DescribeTable、GetItem、PutItem 和 UpdateItem 操作。以下示例策略可用于限制 IAM 用户,仅对 us-west-2 中运行的 DynamoDB 实例执行提供程序所需的操作:
{ "Version" : "2012-10-17", "Statement" : [ { "Sid" : "1", "Effect" : "Allow", "Action" : [ "dynamodb:DeleteItem", "dynamodb:DescribeTable", "dynamodb:GetItem", "dynamodb:PutItem", "dynamodb:UpdateItem" ], "Resource" : "arn:aws:dynamodb:us-west-2:{<YOUR-AWS-ACCOUNT-ID>}:table/ASP.NET_SessionState" } ] }