我正在寻找一些关于如何在现有的asp.net(MVC)应用程序中快速查找会话状态的一些聪明的想法。
有问题的应用程序是外包开发的主题,并且在生产中运行良好。但我们最近意识到它使用InProc会话状态而不是(我们的首选路由)StateServer。
在小规模测试中,我们将其切换到StateServer,一切正常。但是,当我们部署到生产时,我们突然遇到了大量错误。我不确定这些错误是否是由此更改引起的(他们实际上是抱怨数据库级问题),但删除更改允许应用程序再次运行(这可能只是因为它导致了循环发生)。
所以在我再次尝试切换它之前,我想对会话中放置的所有对象进行彻底的审核(我之前已经快速查看了几个控制器,它们看起来很好)。如果我完全控制代码,这就是我只是注释掉类的地方(编译并找到到达会话类的各种方法),然后注释掉访问器,命中编译和访问每个错误。但是我不能用内置的.NET框架类型来做到这一点。
那么,关于如何找到每种用法的任何聪明的想法?
我决定尝试使用Reflector。我已经分析了以下各项的“使用者”:
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)。我是否遗漏了任何可以在会话中结束项目的其他路线?
答案 0 :(得分:2)
您可以获得asp.net MVC的源代码。寻找使用Session
对于MVC 3,http://aspnet.codeplex.com/releases/view/58781 MVC 2 http://aspnet.codeplex.com/releases/view/41742 MVC 1的http://aspnet.codeplex.com/releases/view/24471
我实际上发现这些非常有用,因为当你需要找出为什么它正在做它的作用时。
MVC 2不会在会话关闭的情况下运行,因此它可能以与stateserver不兼容的方式使用会话。
从数据库错误中,听起来像nHibernate可能会做些什么。您可以获得该源代码以查看,但我确信会记录会话的使用。
西蒙
答案 1 :(得分:0)
我说解决方案广泛搜索“会话”。除此之外,如果这是ASP.Net MVC应用程序,那么不要忘记TempData也是Session。