gpt4 book ai didi

c# - 如何将安全主体从我的请求传递到 asp.net MVC 中的线程

转载 作者:行者123 更新时间:2023-11-30 18:21:17 28 4
gpt4 key购买 nike

在我的 ASP.net MVC 应用程序中,我有一个请求执行大量计算以返回结果。这在我自己的服务器上运行良好,但当我转移到 Azure 时,连接/请求在 4 分钟后关闭,所以我永远得不到结果,我只是收到一个错误。

为了解决这个问题,我计划在一个线程中运行长时间的计算,并让客户端轮询以查看它何时完成。

我已经尝试了各种方法(线程、线程池、任务和 hangfire),但我无法将安全上下文/主体/身份从我的请求传递到我的新线程。

这是我正在做的一些 sudo 代码。 (我意识到多个请求应该有一些更好的同步,但这是 sudo 代码)

    public static void SlowCalculation(params)
{
_calculationIsRunning = true;
var principal = System.Security.Principal.GenericPrincipal.Current;
if (principal?.IsInRole("MySecurityGroup") ?? false)
{
// lots of long calculations
_resutsAreReady = true;
_calculationIsRunning = true;
}
}

//
// POST: /Get/
public ActionResult GetResults(params)
{
if (_calculationIsRunning)
return View("InProgress");
else if (_resutsAreReady)
return View("Results", results);
else
// start the calcualtion on a new thread to avoiding having very long running connection that azure will close
System.Threading.Tasks.Task.Run(() => SlowCalculation(params));
}

我在 SlowCalculation 中显示的安全检查实际上在我使用的一些库中被限制了,所以如果我能帮助它,我真的不想改变它。我只想从我的请求中获取主体到我的线程中。

我曾尝试将标识传递给线程函数,但在请求完成时它会被处理掉。

最佳答案

在 ASP.NET 进程中拥有长时间运行的后台线程不是一个好主意。解决这个问题的正确方法是在 Azure 服务总线上发出计算请求,并通知一些工作进程并运行计算。

您可以在 Web 应用程序中进行授权检查,并让工作进程在不进行授权检查的情况下执行计算。如果计算取决于用户的身份,事情就会变得有点困难,因为您需要处理 session / token 过期的可能性。参见 my question here了解如何处理。

关于c# - 如何将安全主体从我的请求传递到 asp.net MVC 中的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35798267/

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