Реализация пользовательского поставщика состояния сеанса в ASP.NET MVC - PullRequest
1 голос
/ 15 марта 2012

Я работаю над реализацией пользовательского поставщика состояния сеанса для моего приложения ASP.NET MVC.Мое требование - хранить данные сеанса как xml в пользовательской таблице на сервере Sql.

Могу ли я использовать существующего sql провайдера состояния сеанса (переопределяя некоторые методы) или я должен создать с нуля, реализовав абстрактный класс SessionStateStoreProviderBase?

Ответы [ 2 ]

3 голосов
/ 30 июля 2014

да, вы можете настроить сессию вашего провайдера класса даже с сервером SQL или оракулом. Просто наследуйте от класса в вашей модели, наследуя от SessionStateStoreProviderBase и реализуя необходимые методы, которые он отправляет, проверьте список необходимых методов здесь .

Если вы хотите использовать пример, см. здесь . Этот пример использует odbc, но просто заменит класс доступа как OdbcConnection на SqlConnection и наоборот.

Удачи.

0 голосов
/ 15 марта 2012

Почему вы просто не используете 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 в качестве имени файла, чтобы сохранить его уникальным.

...