【发布时间】:2014-10-10 11:01:01
【问题描述】:
我想澄清一些 ASP.NET 会话的细节。我正在使用 ASP.NET MVC 3。
假设我有一个标有 [SessionState(SessionStateBehavior.ReadOnly)] 属性的控制器 - 所以它使用只读会话。
会话处于InProc 模式。
根据MSDN,对这个控制器的请求获得了一个读锁并且不能更新会话。
如果他们尝试更新会话值,我想了解这些请求(在一个公共会话内)之间是否仍然可能存在竞争条件?
这些请求使用相同的会话数据结构,而不是单独的副本,对吧?InProc 会话值如何更新?在请求结束时立即或在OnReleaseState 事件中?OnReleaseState 处理程序会发生什么?
更新
我正在调查以下异常:
System.ArgumentException: Item has already been added. Key in dictionary: 'MyKey' Key being added: 'MyKey'
at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add)
at System.Collections.Specialized.NameObjectCollectionBase.BaseAdd(String name, Object value)
at System.Web.SessionState.SessionStateItemCollection.set_Item(String name, Object value)
仅在访问会话的值时会发生这种情况:(DateTime)context.Session["MyKey"]。
This post 描述了与 ASP.NET 会话非常相似的异常。
【问题讨论】:
标签: asp.net .net asp.net-mvc session