Я ищу некоторые умные идеи о том, как быстро найти все использование состояния сеанса в существующем приложении asp.net (MVC).Поиск всего использования состояния сеанса
Заявка, о которой идет речь, была предметом аутсорсингового развития и работает отлично в производстве. Но недавно мы поняли, что он использует состояние сеанса InProc, а не (наш предпочтительный маршрут) StateServer.
В небольшом тесте мы переключили его на StateServer, и все работало нормально. Однако, когда мы развернулись к производству, мы неожиданно столкнулись с большим количеством ошибок. Я не уверен, были ли эти ошибки вызваны этим изменением (на самом деле они жаловались на проблемы с уровнем базы данных), но удаление изменения позволило снова функционировать приложение (возможно, это было связано с тем, что это вызвало рециркуляцию).
Итак, прежде чем я попытаюсь переключить его снова, я бы хотел провести тщательный аудит всех объектов, которые были помещены в сеанс (я раньше быстро просмотрел пару контроллеров, и они казались прекрасными). Если бы у меня был полный контроль над кодом, это место, где я просто прокомментировал класс (для компиляции и поиска различных способов доступа к классу сеансов), затем закомментируйте аксессоров, удалите компиляцию и посетите каждая ошибка. Но я не могу этого сделать со встроенными .NET-типами.
Итак, любые умные идеи о том, как найти каждое использование?
Я решил попробовать использовать рефлектор. Я проанализировал «Используется» для каждого из следующих действий:
System.Web.HttpSessionStateBase.set_Item(String, Object) : Void
System.Web.SessionState.HttpSessionState.set_Item(String, Object) : Void
System.Web.SessionState.HttpSessionState.set_Item(Int32, Object) : Void
System.Web.HttpSessionStateBase.set_Item(Int32, Object) : Void
System.Web.HttpSessionStateBase.Add(String, Object) : Void
System.Web.SessionState.HttpSessionState.Add(String, Object) : Void
(и проверить, что мы не используем TempData в любом месте). Упускаю ли я какие-либо другие маршруты, по которым элементы могут попасть в сеанс?
вы можете сделать свой собственный провайдер SessionState, который оборачивает поставщика InProc, но регистрирует каждый вызов, чтобы добавить, удалить и получить http://msdn.microsoft.com/en-us/library/ms178587.aspx , Таким образом, вы можете использовать стек вызовов для отслеживания каждого использования сеанса в вашем коде. –