Можно ли создать полностью настраиваемый режим состояния сеанса вместо использования Inproc или SQLServer?
Управление состоянием пользовательского сеанса ASP.Net
Ответы (4)
Да, конечно, вы можете написать специальный поставщик хранилища состояний сеансов, внедрив SessionStateStoreProviderBase, а затем установите режим состояния сеанса для этой пользовательской реализации в web.config:
<sessionState
mode="Custom"
customProvider="SomeCustomProviderName">
<providers>
<add name="SomeCustomProviderName"
type="YourNamespace.CustomSessionStateStore"
connectionStringName="SomeConnectionString" />
</providers>
</sessionState>
Это старый вопрос, касающийся того, что я делаю здесь и сейчас в октябре 2014 года.
По сути, исходные ответы по-прежнему верны в том смысле, что вы можете создать свою собственную систему управления состоянием сеанса OutProc, но теперь, когда Microsoft гораздо больше занимается открытым исходным кодом, вы могли бы так же легко перейти к MSOpenTech и загрузите порт Redis для Windows, который также поддерживается Windows Azure.
Redis — это система управления состоянием сеанса OutProc, которую можно запускать в отдельном окне процесса/консоли или в качестве службы Windows для хранилища сеансов/ключей объединительной платы.
MSOpenTech:
Redis — это очень популярное сетевое хранилище данных с открытым исходным кодом в памяти и ключ-значение. Он известен высокой производительностью, гибкостью, богатым набором структур данных и простым понятным API. MS Open Tech работает с сообществом 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