Не безопасно предполагать, что ваш код не виноват. В голову приходит один сценарий: объекты, которые вы кэшируете, не помечены как serializable . Обычно это создаст исключение, и вы будете знать об этом. Однако, если вы также подавляете исключения в блоке перехвата, вы, вероятно, сможете сохранять значения, но не получать их.
Зачем вам вдруг нужно сделать все ваши объекты сериализуемыми? Хорошо, когда вы используете InProc, ваши объекты хранятся в памяти. Однако, когда вы используете SQL, их нужно записать (сериализовать AKA) в базу данных.
В коде:
try {
Session["MyKey"] = SomeNonSerializableObject
}
catch (Exception e)
{
' Suppress all exceptions
}
Я бы также подтвердил, что ваш пользователь ASPState (mytest
в вашем примере) имеет все необходимые разрешения, которые ему требуются. Самый простой способ проверить это - сделать их db_owner в базе данных ASPState AND temp. Если это решит проблему, то вы знаете, что это проблема с разрешениями БД.
Почему tempdb, я слышал, ты спрашиваешь? Ну, по умолчанию таблицы состояний сеансов будут создаваться в базе данных tempdb.