10

我们正在构建一个支持 AJAX 的 Web 应用程序,该应用程序向服务器发出多个异步请求。这些服务器请求中的每一个都是长时间运行的服务器任务,每个任务都将一个 JSON 对象返回到 html 页面。这些调用中的每一个都需要对 Session 对象进行读/写访问。

但是当多个异步任务正在进行时,ASP.NET 会锁定会话对象,从而阻塞第一个异步调用。所以这些异步调用永远不会并行发生。

PS:异步调用是 PageMethod 调用。

当与异步调用一起使用时,是否首先“不”推荐会话。任何其他有关设计此异步请求模型的建议都将受到高度赞赏。

4

2 回答 2

9

感谢所有为我的问题发布答案和评论的人。我正在总结我的发现和解决方案,以便有人可能会发现这很有用。

评论的每个人都对建议不要在异步调用中使用 Sessions 是正确的。那么,我是如何绕过它的呢?

  1. 将 PageMethod 调用更改为实现 IReadOnlySessionState 的 HttpHandler。(在我的例子中,Ajax 调用只需要对 Session 对象进行“读取”访问)
  2. 客户端 JQuery 对服务器 HTTPHandler 进行 Ajax 调用
  3. @Page EnableSessionState 指令可以保留为默认值(读/写)

使用上述解决方案,可以进行多个异步调用,每个调用都读入会话对象

有关对返回 JSON 对象的 HTTP 处理程序进行 Jquery 调用的更多信息,这里是链接

于 2011-03-02T21:07:24.700 回答
1

我实际上同意在使用异步调用时不建议使用会话,事实上在任何情况下都应该最少使用会话。我的大多数应用程序根本不直接使用 sessionstate,除了内部成员资格要求的东西。

于 2011-02-25T19:24:00.067 回答