c# - 异步设计中的 session

标签 c# .net asynchronous ajax.net

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

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

PS:异步调用是 PageMethod 调用。

当与异步调用一起使用时,首先“不”推荐使用 session 。对于设计此异步请求模型的任何其他建议,我们将不胜感激。

最佳答案

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

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

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

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

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

关于c# - 异步设计中的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5118236/

相关文章:

c# - 使用 Youtube 运行 Firefox 会导致出现用于 Flash 播放器的 UAC

javascript - onClick 在 C# 中的按钮单击上不触发

.net - 我的数据库可能会在大约 10 天内变得不可用。有时1秒。如何防止 Entity Framework 连接错误?

c# - 是否可以创建包含 WPF 库的 Mono 包?

c - linux异步串口编程中如何区分读和写

c# - 使用 IEnumerator 对项目进行异步操作

c# - 证书库中证书的私钥不可读

c# - 在 C# 中检查盒装原始整数类型的数值的最快方法

javascript - 处理异步函数

c# - 异步/等待 - 等待未按预期举行