异步操作后 HttpContext.Current null

时间:2021-04-19 19:10:30

标签: asp.net .net

我遇到了 this question 中描述的相同问题,我在异步操作后丢失了 HttpContext.Current。这个问题和我的问题之间的主要区别在于,我已经应用了所有可能的解决方案来解决它 - 所有这些都可以在我的 PC 上运行 但当我们部署到网络服务器时却不起作用已安装 .NET 4.8。另一件要注意的事情是,当我们应用设置时 - 我们可以看到 SynchronizationContext 的类型是 AspNetSynchronizationContext(而不是 Legacy,所以我们似乎拥有了我们想要的东西)。

我们检查了 IIS 应用程序设置并确保没有手动添加或否定设置(例如 <add key="aspnet:UseTaskFriendlySynchronizationContext" value="false" /> 或类似内容),但没有。我们还尝试了 <httpRuntime targetFramework="4.5" /> - 但没有奏效。

是否有任何其他设置/配置/可能的 .NET CLR 解释可以进行此设置:<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" /> 在执行异步操作时不将 HttpContext.Current 传递给线程?

另外 - 如果我有 <httpRuntime targetFramework="4.5" /> - 并且我看到 LegacyAspNetSynchronizationContext - 根本原因可能是什么?

示例(本地)有效,但在网络服务器上中断:

[HttpGet]
[Route("api/DelayTest")]
public async Task<int> Test()
{
    var ctx = System.Web.HttpContext.Current; // not null
    await Task.Delay(new TimeSpan(0, 0, 5));
    ctx = HttpContext.Current; //null here (which causes issues)
        
    return 0;
}

注意:我们的目标是 .NET 4.5:

<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" maxQueryStringLength="6000" />

0 个答案:

没有答案
相关问题