【发布时间】:2011-03-11 03:59:30
【问题描述】:
我刚刚实现了一个使用 IReadOnlySessionState 的处理程序,我想知道为什么需要这个标记接口。 (我知道访问 Session 变量是必需的,我的问题是为什么从框架设计者的角度来看这是)他们想利用会话状态,但我想知道我是否遗漏了其他东西。
【问题讨论】:
标签: c# asp.net session-state
我刚刚实现了一个使用 IReadOnlySessionState 的处理程序,我想知道为什么需要这个标记接口。 (我知道访问 Session 变量是必需的,我的问题是为什么从框架设计者的角度来看这是)他们想利用会话状态,但我想知道我是否遗漏了其他东西。
【问题讨论】:
标签: c# asp.net session-state
你是对的。 IReadOnlySessionState 接口只是让您可以使用 Context.Session 对象。
但如果你实现IRequiresSessionState 接口,你的处理程序会在当前会话上设置排他锁,因此同一会话上下文中的所有其他请求(想要使用 Session 对象)将等到你的处理程序完成。
IReadOnlySessionState 不是很好的名字,因为实际上你可以在这样的处理程序中修改 SessionState 并且你不会得到异常。您只需对自己的并发问题负责。
【讨论】:
<%=Session["t"]%>
<%=Session["t"]%>添加到Default.aspx的标记中,设置EnableSessionState="true",将Session["t"] = ((int) (Session["t"] ?? 1) ) + 1;添加到Default.aspx.cs(在Page_Load中),启动站点并多次刷新页面。每次刷新计数器都会递增。(不知道我只能编辑评论五分钟。很烦人。)
是的,AFAIK,你是对的。 IReadOnlySessionState 和 IRequiresSessionState 都是标记接口,可防止您的处理程序变得更重、更慢。
它们之间的区别只是会话的写入状态。
【讨论】: