我正在扭动一个简单的在线游戏, 在特定的时间,每天,游戏都会更新,到时候,首先我需要注销用户。 在Global.asax的“Application_Start”函数中,我初始化了计时器,当它打勾时,调用我在Global.asax中编写的方法“UpdateGame”。这是方法:
public static void UpdateGame()
{
AccountController account = new AccountController();
AdminController admin = new AdminController();
HomeController home = new HomeController();
account.LogOff();
admin.ChechHireEndTimes();
admin.CheckRentsEndTimes();
admin.UpdateRankings();
admin.InitializeAbstractTimes();
}
当涉及logOff()时,它会冻结。这是logOff方法:
[Authorize]
public ActionResult LogOff()
{
FormsService.SignOut();
return RedirectToAction("Index", "Home");
}
我在它上面做了很多工作,但似乎因为没有使用http请求调用注销,所以当用户按下注销按钮时它不起作用。
所以我的问题是如何从Global.asax内部调用像这样的控制器的动作?
答案 0 :(得分:1)
如果没有用户上下文,则无法在global.asax中执行注销操作。执行account.LogOff()
时应该注销哪个用户?我相信使用app_start重定向(RedirectToAction
)可能会冻结您的应用。
要注销所有用户,您可以使用LastUpdated
全局标志(由UpdateGame方法设置为当前时间)。登录时,您可以将LastUpdated值放入用户会话,并在每个请求中,使用全局值检查此值。如果全局值较高,则通过调用注销方法注销当前用户。