Управление состоянием пользовательского сеанса ASP.Net

Можно ли создать полностью настраиваемый режим состояния сеанса вместо использования Inproc или SQLServer?


person Saber Shebly    schedule 04.03.2011    source источник
comment
К вашему сведению: почти все, что вы хотите настроить в .NET, основано на модели провайдера, а это означает, что существуют ВСЕ ВИДЫ ВЕЩЕЙ, для которых вы можете написать провайдеров. Единственным недостатком является то, что в результате файл app.config/web.config иногда может стать немного неудобным. ;-)   -  person BrainSlugs83    schedule 22.10.2012


Ответы (4)


Да, конечно, вы можете написать специальный поставщик хранилища состояний сеансов, внедрив SessionStateStoreProviderBase, а затем установите режим состояния сеанса для этой пользовательской реализации в web.config:

<sessionState 
    mode="Custom"
    customProvider="SomeCustomProviderName">
    <providers>
        <add name="SomeCustomProviderName"
             type="YourNamespace.CustomSessionStateStore"
             connectionStringName="SomeConnectionString" />
    </providers>
</sessionState>
person Darin Dimitrov    schedule 04.03.2011

Это старый вопрос, касающийся того, что я делаю здесь и сейчас в октябре 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

person rism    schedule 03.10.2014

Я думаю, что это можно сделать так, как вам нравится, но использование баз данных в целом для управления состоянием сеанса (хотя и имеет некоторые недостатки) может иметь много преимуществ, посмотрите мой блог для простой реализации с нуля http://techblog.alkumait.net/index.php/2011/12/net-custom-session-implementation/

person Kumait    schedule 08.01.2012

Я думаю, что это ценная ссылка для людей, которые хотят иметь собственную реализацию сеанса в базе данных: http://msdn.microsoft.com/en-us/library/ms178589.aspx

person 321X    schedule 27.09.2012