[英]Session object becomes null on Azure
因此,我在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;
}
從我的業務層實例化方法時,會使用此驗證。 例如,這是我的客戶CRUD業務層:
公共類CustomerBusiness {內部MyWebApplication.Models.LoginRS InfoUser; 內部MyWebApplication.Models.Customer OBJRES_Residentes =新的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。 這是一張圖片:
這太令人沮喪了,即使我知道性能會受到影響,我也在考慮使用數據庫緩存。
有任何想法嗎? 我真的很感謝你們的幫助
您做錯了方法。 您應該擁有自己的狀態服務器,而不是將會話存儲在Web服務器上。 使用Azure的想法是在需要時添加彈性刻度。
這里有一些選擇:
1-添加Azure Redis緩存並使其成為您的會話管理器到Web應用程序的所有實例;
https://azure.microsoft.com/en-us/documentation/articles/cache-aspnet-session-state-provider/
2-使用Sql數據庫管理狀態。
https://azure.microsoft.com/en-us/blog/using-sql-azure-for-session-state/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.