在我的 ASP.NET MVC 应用程序中,我想按顺序处理所有请求;任何动作/控制器代码不应与另一个同时执行。如果两个请求同时进入,它应该首先运行第一个请求,然后在第一个请求完成后运行第二个请求。
除了使用全局锁变量之外,还有更好的方法吗?
编辑:该应用程序更像是 Web 上的批处理/服务,它执行 Web 服务调用并清理数据库。站点中不同的 URL 会导致不同的批处理操作。这不是面向最终用户的网站。因此,我需要这样做,以便一次只完成对 URL 的一个请求(它将执行一些批处理操作),否则如果批处理操作的代码与其自身或其他批处理操作同时运行,则批处理操作可能会损坏. 事实上,如果另一个请求在当前执行时出现,则根本不应该运行它,即使在前一个请求完成之后也是如此;它应该只给出一条错误消息。
我想知道是否有办法在 IIS 中而不是代码中执行此操作。如果我有一个全局锁变量,它会使代码更复杂,并且我可能会陷入死锁,锁变量设置为 true 但永远不能设置为 false。
编辑:实施计划的示例代码
[HttpPost]
public ActionResult Batch1()
{
//Config.Lock is a global static boolean variable
if(Config.Lock) { Response.Write("Error: another batch process is running"); return View(); }
Config.Lock = true;
//Run some batch calls and web services (this code cannot be interleaved with ExecuteBatchCode2() or itself)
ExecuteBatchCode();
Config.Lock = false;
return View();
}
[HttpPost]
public ActionResult Batch2()
{
if(Config.Lock) { Response.Write("Error: another batch process is running"); return View(); }
Config.Lock = true;
//Run some batch calls and web services (this code cannot be interleaved with ExecuteBatchCode1() or itself)
ExecuteBatchCode2();
Config.Lock = false;
return View();
}
我是否需要担心代码没有达到 Config.Lock = false 的情况,从而导致 Config.Lock = true 永远,导致不再提供请求?