Состояние сеанса ASP.NET Sql Server mode - PullRequest
2 голосов
/ 23 марта 2011

Моя проблема связана с названием, написанным выше.В настоящее время у меня есть некоторые функции, которые полагаются на сессии для выполнения работы.Все работает плавно, если оставить значение по умолчанию.Тем не менее, мне не нравится идея потери сеансов в случае сбоя, и я изменил свой web.config для использования режима Sql Server.

Я выполнил необходимые команды для создания таблиц и хранимых процедур в моембаза данных с использованием aspnet_sql.exe

Я могу сохранить значения в базе данных, но не смог получить их.Поскольку он нормально работал в режиме InProc, я могу с уверенностью предположить, что с моими кодами все в порядке.

Вот мой параметр web.config:

        <sessionState mode="SQLServer" allowCustomSqlDatabase="true" cookieless="false" timeout="120" sqlCommandTimeout="30" compressionEnabled="true" 
                                sqlConnectionString="Data Source=.\SQLExpress;Initial Catalog=mytest;Persist Security Info=True;User ID=mytest;Password=mytest;"/>

Ваша помощь оченьвысоко ценится, заранее спасибо.

1 Ответ

4 голосов
/ 23 марта 2011

Не безопасно предполагать, что ваш код не виноват. В голову приходит один сценарий: объекты, которые вы кэшируете, не помечены как serializable . Обычно это создаст исключение, и вы будете знать об этом. Однако, если вы также подавляете исключения в блоке перехвата, вы, вероятно, сможете сохранять значения, но не получать их.

Зачем вам вдруг нужно сделать все ваши объекты сериализуемыми? Хорошо, когда вы используете InProc, ваши объекты хранятся в памяти. Однако, когда вы используете SQL, их нужно записать (сериализовать AKA) в базу данных.

В коде:

try {
    Session["MyKey"] = SomeNonSerializableObject
}
catch (Exception e)
{
    ' Suppress all exceptions 
}

Я бы также подтвердил, что ваш пользователь ASPState (mytest в вашем примере) имеет все необходимые разрешения, которые ему требуются. Самый простой способ проверить это - сделать их db_owner в базе данных ASPState AND temp. Если это решит проблему, то вы знаете, что это проблема с разрешениями БД.

Почему tempdb, я слышал, ты спрашиваешь? Ну, по умолчанию таблицы состояний сеансов будут создаваться в базе данных tempdb.

...