Я недавно унаследовал приложение, которое очень интенсивно использует сеанс, включая хранение большого количества пользовательских объектов данных в сеансе. Одной из моих первых задач в этом приложении было, по крайней мере, переместить данные сеанса из InProc и загрузить их на сервер состояний или на SQL Server.
После того, как я сделал все соответствующие объекты данных сериализуемыми и изменил web.config для использования службы состояний, все казалось работающим нормально.
Однако я обнаружил, что это приложение выполняет много сравнений объектов, используя GetHashCode (). Методы, которые работали нормально, когда сеанс был InProc, больше не работают, потому что HashCodes больше не совпадают, когда они должны. Похоже, это имеет место при попытке найти определенный дочерний объект от родителя, когда вы знаете оригинальный хеш-код дочернего объекта
Если я просто верну web.config обратно на использование inproc, он снова заработает.
У кого-нибудь есть мысли о том, с чего начать?
РЕДАКТИРОВАТЬ:
qbeuek: спасибо за быстрый ответ. В отношении:
Реализация по умолчанию GetHashCode в классе Object возвращает хеш-значение на основе адреса объекта в памяти или чего-то подобного. Если требуется какое-то другое сравнение идентификаторов, необходимо переопределить как Equals, так и GetHashCode.
Я должен был дать больше информации о том, как они это используют. По сути, они имеют один родительский объект данных и несколько массивов дочерних объектов. Они случайно знают хеш-код для конкретного объекта, который им нужен, поэтому они перебирают определенный массив дочерних объектов в поисках подходящего хеш-кода. Как только совпадение найдено, они используют этот объект для другой работы.