Реализация пользовательского поставщика состояния сеанса в ASP.NET MVC
Я работаю над реализацией пользовательского поставщика состояния сеанса для моего приложения ASP.NET MVC. Мое требование, я должен хранить данные сеанса как xml
в пользовательской таблице на сервере Sql.
Могу ли я использовать существующего поставщика состояния сеанса sql (переопределяя некоторые методы) или я должен создать его с нуля, реализовав абстрактный класс SessionStateStoreProviderBase
?
2 ответа
Почему вы просто не используете SQL-сервер в качестве поставщика состояния? Вы можете установить его в конфигурации, и это происходит автоматически, тогда SQL-сервер будет хранить данные в виде сериализованных двоичных данных и эффективно их извлекать?
Короткий ответ - да, вы можете, но он заново изобретает колесо. Вам нужно использовать данные для чего-либо еще или отредактировать их самостоятельно? Я был бы склонен использовать отдельный процесс для этого. Вы собираетесь создать небольшую работу для себя, делая это, и было бы лучше просто сохранить свойство xml где-нибудь, когда вы установите его в sessiopn, если вам нужно посмотреть его позже.
Сделайте ваш XML-документ объектом сеанса
Session["MyCustomXml"] = mydoc;
var mydoc = Session["MyCustomXml"] as XmlDocument;
затем используйте следующую конфигурацию, чтобы она сохранялась на сервере sql.
<sessionState
mode="SQLServer"
sqlConnectionString="data source=127.0.0.1;user id=<username>;password=<strongpassword>"
cookieless="false"
timeout="20"
/>
Если вам нужно посмотреть позже, просто сохраните его на диске где-нибудь в безопасном месте с SessionId в качестве имени файла, чтобы сохранить его уникальным.
Да, вы можете настроить сессию вашего провайдера класса даже с сервером SQL или оракулом. Просто наследуйте от класса в вашей модели, наследуя от SessionStateStoreProviderBase и реализуя необходимые методы, которые он отправляет, проверьте список необходимых методов здесь.
Если вы хотите использовать пример, смотрите здесь. Этот пример использует odbc, но просто заменит класс доступа как OdbcConnection к SqlConnection и наоборот.
Удачи.