簡體   English   中英

為什么C#Web應用程序在Application_End()調用中會重建結果?

[英]Why Does a C# Web App ReBuild Result in Application_End() Call?

我注意到在調試我的應用程序時,有時[InProc]會話狀態在重新生成(C#Web應用程序)后會被破壞。 事件的順序如下:

  1. 重建並運行應用程序(調試或發布模式,無關緊要)
  2. 在Page_Load()事件中填充會話變量
  3. Session_End()觸發,然后Application_End fires()
  4. 我執行回發並檢查在步驟2中填充的Session變量,該變量為空。

我正在使用IIS Express運行此應用程序,但是無論使用哪種Web服務器,它似乎都會發生。 由於應用程序沒有依靠Session變量消失,這導致了許多問題。

namespace BlankWebApp
{
  public partial class _Default : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      if (!IsPostBack)
      {
        Session["test"] = true;
      }
    }

    protected void butCheckSession_Click(object sender, EventArgs e)
    {
      if (Session["test"] == null)
      {
        // Session_End and Application_End must have been called
      }
    }
  }
}

更改bin文件夾的內容將導致應用程序池回收。 這就是Re-Build發生的情況,因為rebuild會編譯應用程序並為項目創建新的dll /可執行文件,從而導致bin文件夾中的更改。 應用程序池回收將導致會話從服務器內存中刪除。

更改Web.Config文件也是如此。

你無法避免。 您應該有一個單獨的開發和生產環境。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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