Ole*_*hko 25 c# asp.net httphandler session-state
第二个不能保存对会话变量的更改的区别IRequiresSessionState和IReadOnlySessionState旁边有什么区别?
两者都为我提供了访问我的会话变量的能力HttpHandler.但为什么我更喜欢IReadOnlySessionState?它只是限制我保存下一个请求的会话.
或者它是否给我带来了性能优势IRequiresSessionState?
什么时候我宁愿用IReadOnlySessionState了IRequiresSessionState?
Chr*_*ris 25
一个关键的区别是IRequiresSessionState对当前会话设置了排他锁,从而可能限制来自当前用户的并发请求数.(有关此锁定现象的更多背景信息,请参阅使用ASP.NET会话时是否可以强制请求并发?)
相反,IReadOnlySessionState不获取独占锁.
这与雷纳德对一个几乎相同的SO问题的有用答案中记载的情况相同.
我发现的最好的官方文档来自MSDN文章会话状态提供者:
会话状态提供程序中最重要的三个方法是GetItem,GetItemExclusive和SetAndReleaseItemExclusive.前两个由SessionStateModule调用,以从数据源检索会话.如果请求的页面实现了IRequiresSessionState接口(默认情况下,所有页面都实现IRequiresSessionState),则SessionStateModule的AcquireRequestState事件处理程序会调用会话状态提供程序的GetItemExclusive方法.方法名称中的"独占"一词意味着只有在其他请求当前未使用会话时才应检索该会话.另一方面,如果请求的页面实现了IReadOnlySessionState接口(实现此目的的最常见方式是在页面的@Page指令中包含EnableSessionState ="ReadOnly"属性),则SessionStateModule将调用提供程序的GetItem方法.此处不需要排他性,因为SessionStateModule允许重叠读访问.
请注意显式使用这些接口和使用EnableSessionState Page指令之间的并行:
该接口控制框架是否将在请求结束时保存当前会话状态.当您使用进程外会话状态存储时,它会产生更大的不同.在这种情况下,如果没有接口,系统仍会将会话数据存储在远程数据库中,即使它没有更改(系统也不会跟踪会话数据是否在请求期间被修改).使用IReadOnlySessionState接口时,将跳过写回阶段.
| 归档时间: |
|
| 查看次数: |
7693 次 |
| 最近记录: |