Microsoft.AspNet.SessionState.SqlSessionStateProviderAsync 2.0.0

前缀已保留
dotnet add package Microsoft.AspNet.SessionState.SqlSessionStateProviderAsync --version 2.0.0                
NuGet\Install-Package Microsoft.AspNet.SessionState.SqlSessionStateProviderAsync -Version 2.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Microsoft.AspNet.SessionState.SqlSessionStateProviderAsync" Version="2.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Microsoft.AspNet.SessionState.SqlSessionStateProviderAsync --version 2.0.0                
#r "nuget: Microsoft.AspNet.SessionState.SqlSessionStateProviderAsync, 2.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Microsoft.AspNet.SessionState.SqlSessionStateProviderAsync as a Cake Addin
#addin nuget:?package=Microsoft.AspNet.SessionState.SqlSessionStateProviderAsync&version=2.0.0

// Install Microsoft.AspNet.SessionState.SqlSessionStateProviderAsync as a Cake Tool
#tool nuget:?package=Microsoft.AspNet.SessionState.SqlSessionStateProviderAsync&version=2.0.0                

Microsoft.AspNet.SessionState.SqlSessionStateProviderAsync

.NET 4.6.2中,asp.net启用了异步版本SessionState模块的插件,适用于非内存的SessionState数据存储。此SessionState提供程序使用SQL Server作为数据存储,利用异步数据库操作以提供更好的可伸缩性。

在指定此新的异步提供程序之前,您需要如此处所述设置新的异步SessionState模块。

然后,注册您的提供程序如下

  <sessionState cookieless="false" regenerateExpiredSessionId="true" mode="Custom" customProvider="SqlSessionStateProviderAsync">
    <providers>
      <add name="SqlSessionStateProviderAsync" connectionStringName="DefaultConnection" sessionTableName="[string]"
          repositoryType="[SqlServer|InMemory|InMemoryDurable|FrameworkCompat]"
          maxRetryNumber="[int]" retryInterval="[int]" skipKeepAliveWhenUnused="false"
          type="Microsoft.AspNet.SessionState.SqlSessionStateProviderAsync, Microsoft.AspNet.SessionState.SqlSessionStateProviderAsync, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </providers>
  </sessionState>

有关表和数据持久性的说明

旧的内置SQL提供程序允许应用程序通过在aspnet_regsql.exe-sstype参数中包含三种数据配置进行选择。这些类型是永久、临时或自定义。三者之间的区别仅仅是aspnet_regsql.exe和应用程序在运行时使用的数据库和表名。

  • 使用永久选项,会话状态将存储在连接字符串中指定的数据库中硬编码且已知的表名中。在这种配置下,由于能经受 SQL 服务器重启,因此表模式和数据都是“永久”的。
  • 使用临时选项,会话状态将存储在连接字符串中指定的 SQL 服务器上的“tempdb”数据库中硬编码且已知的表名中。“tempdb”数据库在 SQL 服务器重启时会被清除,因此数据不会保留。在该情况下,表模式和存储过程也会被清除,但会有一个启动进程来重新创建会话状态表和存储过程。
  • 使用自定义选项,会话状态将存储在由开发人员/管理员提供的表名中。在数据库中创建的存储过程将与那个自定义表名一起工作。

使用这个新的提供程序,不再需要运行 aspnet_regsql.exe。(虽然,在设置 'repositoryType=FrameworkCompat' 时可以使用与 'aspnet_regsql.exe' 创建的存储的兼容性。)当使用 SqlServer 'repositoryType' 时,如果表和存储过程不存在,则提供程序将自动创建它们。默认情况下,该表名是“硬编码且已知”的 - 虽然它已从上一个版本中更改以避免意外的兼容性问题。您可以通过使用提供程序上的 'sessionTableName' 属性来更改该表名。在这种类型存储中数据是否是“临时”或“永久”的,完全取决于所使用的连接字符串。如果连接字符串指示使用“tempdb”,则数据将是临时的。如果指示的不是临时初始数据库,则数据将经受 SQL 重启。

然而,当使用内存优化的 'repositoryType' 时,数据的持久性由优化的表模式决定。因此,提供程序需要知道对其创建的任何表要应用哪些设置。如果您想要可经受 SQL 服务器重启的永久数据,必须使用 InMemoryDurable

Microsoft.AspNet.SessionState.SqlSessionStateProviderAsync 的设置

  1. repositoryType - 四个值之一。默认值是 'FrameworkCompat',出于兼容性的原因 - 除非已设置了过时的 'useInMemoryTable' 并将其设置为 true,否则默认存储库类型成为 'InMemory'。

    • SqlServer - 使用此选项使用常规 SQL 服务器配置进行全新部署。如果不存在,该配置将创建会话表和相关的存储过程。(注意 - 这个存储库类型期望/创建的会话表使用不同的数据类型来存储状态,因此与该提供程序的 1.1 版本不兼容。)

    • InMemory - 使用此选项利用 "内存优化表" 和 "本地编译存储过程"。从 2.0 版本开始,我们创建了本地编译的存储过程,以便与内存优化的表一起使用,以实现额外的性能提升。(V1.1 完全没有使用存储过程。)表是不可变的,但数据不是(SCHEMA_ONLY),SQL 服务器重启时将会丢失。

    • InMemoryDurable - 与上面相同,除了它使用一个 SCHEMA_AND_DATA 可持久表,以便会话数据经受 SQL 服务器重启。

    • FrameworkCompat - 介绍此模式是为了使用由 aspnet_regsql.exe 提供的现有会话状态数据库。因此,它不会创建任何新表或存储过程。它利用与本机 SQL 会话状态提供程序相同的存储过程。

      此兼容配置 同时也 解决了针对先前由这些提供程序的 1.1 版本配置的数据库的问题,因为当前表模式与 1.1 表模式不完全兼容。当处理 1.1 部署的会话表时,此存储库继续像 1.1 提供程序一样使用原始 SQL 语句而不是存储过程。

      在此配置中,提供程序自动在框架和 V1.1 兼容模式之间做出决定。

  2. sessionTableName - 供应商现在允许使用特定的表名来存储会话,而不是始终使用硬编码的默认值。

  3. maxRetryNumber - 从/向 SQL Server 读取/写入会话状态数据的 SQL 查询的最大重试次数。默认值是 10。

  4. retryInterval - 执行 SQL 查询重试之间的间隔。内存表格模式的默认值是 0.001 秒。否则,默认值是 1 秒。

  5. skipKeepAliveWhenUnused - 此设置将跳过更新请求过期时间的调用,这些请求没有读取或写入会话状态。默认值是 "false",以维持与先前行为的兼容性。但某些应用程序(如 MVC)可能由于处理了大量的请求,而这些请求甚至从未查看过会话状态,因此可以通过将此设置设置为 "true" 来减少会话状态存储的使用和竞争。将此设置为 "true" 的意思是一个会话需要被使用(不一定是更新,但至少是请求/查询)以保持活动状态。

  6. [已弃用] useInMemoryTable - 在未指定 repositoryType 值的情况下,此设置将用于确定是否使用 SQL Server 2016 In-Memory OLTP 进行会话状态。然而,如果指定了 repositoryType,则该设置具有优先级。您可以在这篇博客中找到有关在会话状态中使用内存表更详细的信息。

产品 兼容和额外计算的Target Framework版本。
.NET Framework net462 兼容。 net463 已计算。 net47 已计算。 net471 已计算。 net472 已计算。 net48 已计算。 net481 已计算。
兼容的Target Framework
包含的Target Framework(在包中)
更多关于 Target Frameworks.NET Standard 的信息。

NuGet 包

此包不被任何 NuGet 包使用。

GitHub 存储库

此包不被任何流行的 GitHub 存储库使用。

版本 下载 最后更新
2.0.0 42,112 6/15/2023
2.0.0-preview1 2,759 4/12/2023
1.1.0 507,838 5/12/2017
1.0.0 1,966 9/30/2016