异步设计中的会话

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

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

PS:异步调用是PageMethod调用。

当使用并行异步调用时,首先不建议使用会话。 有关设计此异步请求模型的任何其他建议将受到高度赞赏。

感谢大家在我的问题上发表了答案和评论。 我总结了我的发现和解决方案,以便有人可能会觉得这很有用。

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

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

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

有关对返回JSON对象的HTTP处理程序进行Jquery调用的更多信息,请参阅此链接

我实际上同意在使用异步调用时不建议使用会话,实际上会话的使用在任何情况下都应该是最小的 。 我的大多数应用程序根本不直接使用sessionstate,除了内部的Membership内容所要求的内容。