0

我知道为了让 ASP.Net 处理程序支持会话状态,您需要同时实现IHttpHandlerand IRequireSessionState,但为什么默认情况下不提供会话状态?如果出于性能原因,那么拥有类似的接口不是更好IDoesNotRequireSessionState吗?

4

2 回答 2

1

这是因为会话阻塞了异步操作,并且句柄通常用于长时间操作,例如文件的制作和下载 - 如果您将会话保持在长时间操作中,则会阻塞其余页面。

此外,手柄是根据获得响应所需的最小值的想法制作的。

关于会话锁定:
Web 应用程序在共享同一会话时处理另一个 Web 应用程序时被阻止
对 Web 服务的 jQuery Ajax 调用似乎是同步的
ASP.NET 服务器不会异步处理页面
完全替换 ASP.Net 的会话

于 2013-05-09T19:36:03.757 回答
1

如果出于性能原因,那么拥有像 IDoesNotRequireSessionState 这样的接口不是更好吗?

绝对不是,因为每个实现处理程序的人都必须知道这个接口的存在。就性能而言,从 ASP.NET 获得的 HTTP 处理程序是最快的。因此,如果您想用诸如会话之类的垃圾来污染它,那么您最好通过实现一些您应该知道的接口来明确地做到这一点,并为此承担全部责任。

于 2013-05-09T19:37:22.137 回答