asp.net проблема с сериализацией на тестовом сервере

#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).aspx

3. У меня нет тега SessionState в моей локальной веб-конфигурации. Каким будет значение по умолчанию?

4. По умолчанию InProc , именно поэтому приложение работает для вас локально. Вероятно, клиент мог изменить этот параметр в своем локальном web.config, web.config на уровне сервера или machineHost.config.

5. Он будет наследоваться от machine.config, если никакая веб-конфигурация не переопределит его.