【发布时间】:2011-03-04 14:58:16
【问题描述】:
是否可以构建完全自定义的会话状态模式而不是使用 Inproc 或 SQLServer?
【问题讨论】:
-
仅供参考:您想要在 .NET 中配置的几乎所有内容都基于“提供程序模型”,这意味着您可以为所有类型的事物编写提供程序。唯一的缺点是 app.config/web.config 有时会因此变得有点麻烦。 ;-)
标签: asp.net session-state
是否可以构建完全自定义的会话状态模式而不是使用 Inproc 或 SQLServer?
【问题讨论】:
标签: asp.net session-state
是的,绝对可以,您可以通过实现SessionStateStoreProviderBase 类来编写custom session state store provider,然后在web.config 中将会话状态模式设置为此自定义实现:
<sessionState
mode="Custom"
customProvider="SomeCustomProviderName">
<providers>
<add name="SomeCustomProviderName"
type="YourNamespace.CustomSessionStateStore"
connectionStringName="SomeConnectionString" />
</providers>
</sessionState>
【讨论】:
这是一个较老的问题,与我在 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
【讨论】:
我认为可以按照您喜欢的方式进行操作,但是通常使用数据库进行会话状态管理(虽然有一些缺点)可以有很多好处,请查看我的博客以了解从头开始的简单实现 http://techblog.alkumait.net/index.php/2011/12/net-custom-session-implementation/
【讨论】:
我认为对于希望在数据库中实现自定义会话的人来说,这是一个有价值的链接:http://msdn.microsoft.com/en-us/library/ms178589.aspx
【讨论】: