我刚刚实现了一个使用IReadOnlySessionState的处理程序,并想知道为什么需要这个标记接口。 (我知道为了访问Session变量需要它,我的问题是为什么这是从框架设计者的角度来看)我的想法是,处理程序可以尽可能精简,要求他们“选择加入”他们想利用会话状态,但我想知道我是否遗漏了其他东西。
答案 0 :(得分:8)
IReadOnlySessionState
接口只是让您可以使用Context.Session对象。
但是如果你实现了IRequiresSessionState
接口,那么你的处理程序会对当前会话进行独占锁定,因此在同一个会话的上下文中所有其他请求(想要使用Session对象)将等待你的处理程序完成。
IReadOnlySessionState
不是很好的名字,因为实际上你可以在这样的处理程序中修改SessionState,你不会得到异常。你只需对你的并发问题负责。
答案 1 :(得分:3)
是的,AFAIK,你是对的。 IReadOnlySessionState
和IRequiresSessionState
都是标记接口,可以防止您使处理程序变得更重,速度更慢。
它们之间的区别仅在于会话的写入状态。