【问题标题】:ASP.Net Custom Session State ManagementASP.Net 自定义会话状态管理
【发布时间】:2011-03-04 14:58:16
【问题描述】:

是否可以构建完全自定义的会话状态模式而不是使用 Inproc 或 SQLServer?

【问题讨论】:

  • 仅供参考:您想要在 .NET 中配置的几乎所有内容都基于“提供程序模型”,这意味着您可以为所有类型的事物编写提供程序。唯一的缺点是 app.config/web.config 有时会因此变得有点麻烦。 ;-)

标签: asp.net session-state


【解决方案1】:

是的,绝对可以,您可以通过实现SessionStateStoreProviderBase 类来编写custom session state store provider,然后在web.config 中将会话状态模式设置为此自定义实现:

<sessionState 
    mode="Custom"
    customProvider="SomeCustomProviderName">
    <providers>
        <add name="SomeCustomProviderName"
             type="YourNamespace.CustomSessionStateStore"
             connectionStringName="SomeConnectionString" />
    </providers>
</sessionState>

【讨论】:

    【解决方案2】:

    这是一个较老的问题,与我在 2014 年 10 月此时此地所做的事情有关。

    基本上,最初的答案仍然是正确的,因为您可以构建自己的自定义 OutProc 会话状态管理系统,但随着微软现在更多地参与开源,您可以轻松访问MSOpenTech and download the Redis port for Windows,即Windows Azure 也支持。

    Redis 是一个 OutProc 会话状态管理系统,可以在独立的进程/控制台窗口中运行,也可以作为背板会话/键值存储的 Windows 服务。

    MSOpenTech:

    Redis 是一个非常流行的开源、网络化、内存中的键值对 数据存储。它以高性能、灵活性、丰富的集合而闻名 数据结构和简单直接的 API。 MS 开放技术有 一直在与 Redis 社区合作以构建可用于生产的 Redis 的 Windows 端口,包括 64 位支持,安装程序 Windows Azure、NuGet 支持等等。

    Redis.io 简介:

    Redis 是一个开源、BSD 许可的高级键值缓存和 店铺。它通常被称为数据结构服务器,因为键 可以包含字符串、散列、列表、集合、排序集合、位图和 超级日志

    您可以使用它来存储 ASP.NET MVC、WebAPi 和 SignalR 的会话状态,这在网络农场环境中非常方便。

    安装包 Microsoft.Web.RedisSessionStateProvider

    它可以通过 web.config 轻松配置,当我说简单时,我的意思是简单。

    <system.web>
      <sessionState mode="Custom" customProvider="MySessionStateStore">
          <providers>
            <add name="MySessionStateStore" type="Microsoft.Web.Redis.RedisSessionStateProvider" host="127.0.0.1" port="6379" accessKey="" ssl="false" />
          </providers>
        </sessionState>
    </system.web>
    

    其实很简单,我一开始以为我一定做错了。 ;) 但这就是将会话状态外包给 Redis 所需的全部内容。

    它是一个高性能的端口,非常接近原始的 POSIX 版本。

    我们将它用于金融服务应用程序,该应用程序通过 Signalr 遇到大量实时推送和拉取,如上所述,它还“支持”Redis 以维护中心会话状态。

    因此,尽管您仍然可以按照公认的答案去做,但大约 3 年半之后,我会寻找其中一些替代默认 ASP.NET 会话管理体验的替代方案,这些替代方案可通过 OSS 免费获得。

    https://github.com/MSOpenTech/redis

    http://www.codeproject.com/Articles/636730/Distributed-Caching-using-Redis

    【讨论】:

      【解决方案3】:

      我认为可以按照您喜欢的方式进行操作,但是通常使用数据库进行会话状态管理(虽然有一些缺点)可以有很多好处,请查看我的博客以了解从头开始的简单实现 http://techblog.alkumait.net/index.php/2011/12/net-custom-session-implementation/

      【讨论】:

        【解决方案4】:

        我认为对于希望在数据库中实现自定义会话的人来说,这是一个有价值的链接:http://msdn.microsoft.com/en-us/library/ms178589.aspx

        【讨论】:

          猜你喜欢
          • 2011-06-17
          • 2010-12-31
          • 2023-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多