gpt4 book ai didi

c# - 如何为 Web 窗体项目中长时间运行的 Ajax 请求禁用/释放早期 session 状态阻塞

转载 作者:行者123 更新时间:2023-12-05 07:49:39 25 4
gpt4 key购买 nike

我遇到了有关 ASP.NET 网页中 session 状态阻塞的问题。

通常,web-api 项目没有 session 状态。然而,当我们从遗留项目开发时,web-api 2 模块被注入(inject)到旧的 web-form 项目中,我们从那里继续。但是,现在我们检测到 2 个问题:

  1. AJAX 请求总是排队并逐一执行。它击败了并发处理的目的
  2. 对于长时间处理的请求,用户不能在另一个页面上移动,即使他/她不需要知道请求结果。

(1) 和 (2) 的罪魁祸首是 session 状态阻塞。我们将身份验证信息保存到 Web 表单项目的 session 状态中;然后在 Web-API Controller 上重用它们。但是,由于任何请求都需要session,那么它们会一个接一个地执行,对于长请求,即使用户已经离开该页面,新的请求也不会进来(session仍然被阻塞)

我查了几个相关问题的答案,看来我不是一个人:

  1. This question清楚地告知情况,但没有提供明确的解决方案(对于 Web-API 案例)
  2. This question还提供有关使用不阻止并发的只读 session 的​​良好建议。但是,我们仍然不知道如何在 Web 表单项目中使用 WebAPI Controller 。
  3. 根据 MVC 文档,我们可以通过在 Controller 级别添加属性 [System.Web.Mvc.SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)] 来禁用 session 状态。但是它没有用(如预期的那样,因为我们这里有 Web-API Controller )。不幸的是,我没有为 web-api Controller 找到类似的属性/任何机制。

我还检查:在 PHP 案例中,它们 have the same issue , 但他们可以根据需要提前释放 session 锁。

因此我想知道:

  1. 有没有办法为某些 Web-API 操作/ Controller 禁用 session ?
  2. 有没有办法在我们不再需要时提前释放 session 锁?

最佳答案

Dot Net 默认序列化 session 状态。您可以使用 session 修饰符装饰您的类,以便可以在没有 session 状态的情况下异步访问它。

这适用于客户端是 java 或 jquery 并且它们正在轮询您的 Controller 的情况。 Controller 将稍后发布。为了使其更可预测,请将此指定放在您的类(class)中:

[SessionState(SessionStateBehavior.ReadOnly)]
function Do()
{
}

关于c# - 如何为 Web 窗体项目中长时间运行的 Ajax 请求禁用/释放早期 session 状态阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37106959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com