簡體   English   中英

會話對象在Azure上為空

[英]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。 這是一張圖片:

Azure_Portal

這太令人沮喪了,即使我知道性能會受到影響,我也在考慮使用數據庫緩存。

有任何想法嗎? 我真的很感謝你們的幫助

您做錯了方法。 您應該擁有自己的狀態服務器,而不是將會話存儲在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM