#asp.net #session #serialization
#asp.net #сессия #сериализация
Вопрос:
Я работал над проектом, и он отлично работает на моей машине разработки. Когда я перемещаю его на сервер этапа для тестирования, я получаю следующую ошибку:
Unable to serialize the session state. In 'StateServer' and 'SQLServer'
В сообщении об ошибке в качестве проблемы указывается один из моих бизнес-объектов. На самом деле код был разработан другим разработчиком, но я считаю, что проблема заключается в том, что бизнес-объект сохраняется в сеансе.
Почему это будет работать на моем локальном компьютере, но не на удаленном сервере?
Комментарии:
1. Вы уверены, что web.config абсолютно одинаков на обеих машинах? если вы используете сервер состояния, все объекты в сеансе ДОЛЖНЫ быть сериализуемыми.
2. Они определенно не равны. Даже не близко. Есть ли какая-то конкретная вещь, которую я должен искать?
3. да, конфигурация сеанса. вы должны убедиться, что все объекты, которые вы помещаете в сеанс, сериализуемы, иначе это не сработает.
4. Помечен ли объект, который вы сериализуете
Serializable
?
Ответ №1:
Вероятно, ваша машина для разработки использует поставщика сеансов InProc, который сериализуется в памяти. Когда используется поставщик сеансов SQLServer, к вашим объектам предъявляются гораздо более строгие требования.
Скорее всего, один из ваших объектов просто не сериализуем. Причины могут быть разными: от простого «не помечено как сериализуемое» до «полагаться на внешние типы, которые не сериализуемы».
Попробуйте отследить проблемный тип, проверив внутреннее исключение. Обычно вы найдете там информацию о значении.
Комментарии:
1. Есть ли способ проверить, используется ли InProc? К сожалению, сервер является клиентским компьютером, поэтому я не могу его контролировать. Я нашел другую статью, в которой приведен некоторый код, который я могу использовать для проверки того, является ли мой объект сериализуемым, поэтому я буду тестировать это, когда у меня будет такая возможность.
2.
sessionState
Элементweb.config
управляет тем, как ваши данные сохраняются в контейнере сеанса. По-видимому, он настроен наInProc
SqlServer
компьютере вашего клиента или на нем. Попросите его изменить его наInProc
временно, чтобы убедиться, что проблема существует, и потратить некоторое время на исправление ваших объектов, чтобы их можно было сериализовать. msdn.microsoft.com/en-us/library/h6bb9cz9 (ПРОТИВ 71).aspx3. У меня нет тега SessionState в моей локальной веб-конфигурации. Каким будет значение по умолчанию?
4. По умолчанию
InProc
, именно поэтому приложение работает для вас локально. Вероятно, клиент мог изменить этот параметр в своем локальном web.config, web.config на уровне сервера или machineHost.config.5. Он будет наследоваться от machine.config, если никакая веб-конфигурация не переопределит его.