【发布时间】:2017-02-17 03:29:45
【问题描述】:
所以,我在 C# 上使用 MVC 开发了一个应用程序。一切都在本地完美运行。
我决定将整个东西安装在 Microsoft Azure 上。我的 Session 对象由于某种原因变为 null,导致会话由于我的验证而过期。这是随机的,有时几秒钟后,有时一分钟后。我确信这不是因为不活动的时间,因为它发生在我点击事物时。
这是我创建对象的登录方法:
public ActionResult Login(MyWebApplication.Models.LoginRQ User)
{
if (ModelState.IsValid)
{
MyWebApplication.Models.LoginRS login = new MyWebApplication.Models.LoginRS();
try
{
MyWebApplication.LoginBusiness LoginProxy = new MyWebApplication.LoginBusiness();
login = LoginProxy.Login(User);
if (login.Logged == false)
{
ViewBag.MessageError = Wrong user";
}
Session["InfoUser"] = login;
return RedirectToAction("Index","Inicio");
}
catch (Exception ex)
{
ViewBag.MessageError = ex.Message;
}
}
return View(User);
}
这是我对每种方法的验证:
public static bool ValidateSession(MyWebApplication.Models.LoginRS InfoUser)
{
if (InfoUser == null)
{
throw new ArgumentException("SESSION EXPIRED");
}
return true;
}
我在从业务层实例化方法时使用此验证。例如,这是我的 Customer CRUD 业务层:
公共类 CustomerBusiness { 内部 MyWebApplication.Models.LoginRS InfoUser; 内部 MyWebApplication.Models.Customer OBJRES_Residentes = new MyWebApplication.Models.Customer();
[Logger]
public CustomerBusiness(MyWebApplication.Models.LoginRS InfoUser)
{
MyWebApplication.LoginBusiness.ValidateSession(InfoUser);
this.InfoUser = InfoUser;
}
} 如您所见,我需要 InfoUser,因此我在 CRUD 操作中记录了用户名。
这是我的 WebConfig 的一部分:
<system.web>
<sessionState mode="InProc" timeout ="20" cookieless="false"></sessionState>
<customErrors mode="Off">
</customErrors>
</system.web>
不,让我们谈谈我是如何在 Azure 上配置它的。我创建了一个 WebApplication 和一个 SQL Server Azure DB。这是一张图片:
这太令人沮丧了,以至于我正在考虑使用数据库缓存,即使我知道性能会受到影响。
有什么想法吗?非常感谢你们的帮助
【问题讨论】:
-
这个验证方法在哪里调用?
-
如果你改用 system.web.httpcontext.current.session 会发生什么?
-
您是如何部署的:Web 应用程序?您如何管理您的会话:进程内?请编辑您的问题并提供更多详细信息。
-
朋友们好。感谢您的回答。我用更多细节更新了我的问题。谢谢
标签: c# asp.net-mvc azure session