我们正在构建一个支持 AJAX 的 Web 应用程序,该应用程序向服务器发出多个异步请求。这些服务器请求中的每一个都是长时间运行的服务器任务,每个请求都将一个 JSON 对象返回到 html 页面。这些调用中的每一个都需要对 Session 对象的读/写访问权限。
但是当有多个异步任务在进行时,ASP.NET 会锁定 session 对象,从而阻塞第一个异步调用。所以这些异步调用永远不会并行发生。
PS:异步调用是 PageMethod 调用。
当与异步调用一起使用时,首先“不”推荐使用 session 。对于设计此异步请求模型的任何其他建议,我们将不胜感激。
最佳答案
感谢所有对我的问题发表回答和评论的人。我正在总结我的发现和解决方案,以便有人会发现这很有用。
评论的每个人都建议不要在异步调用中使用 session 是正确的。那么,我是如何绕过它的呢?
- 将 PageMethod 调用更改为实现 IReadOnlySessionState 的 HttpHandler。 (在我的例子中,Ajax 调用只需要对 Session 对象进行“读取”访问)
- 客户端 JQuery 对服务器 HTTPHandler 进行 Ajax 调用
- @Page EnableSessionState 指令可以保留为默认值(读/写)
使用上述解决方案,每次调用读入 session 对象时都可以进行多个异步调用
有关对返回 JSON 对象的 HTTP 处理程序进行 Jquery 调用的更多信息,这里是 link
关于c# - 异步设计中的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5118236/