2014-12-04 193 views
0

我試過使用亞馬遜網絡服務EC2來測試我正在開發的IIS/ASP.NET應用程序,並且我的登錄工作正常,但ASP.NET會話不會'似乎在重新加載頁面或轉移到另一頁面時似乎保持不變。從我的登錄表單頁面ASP.NET EC2上的ASP.NET會話持久性

的Page_Load代碼(會話被設置正確,直到我要麼移動頁面或刷新頁面LoginForm的)

protected void Page_Load(object sender, EventArgs e) 
      { 
        if(Page.IsPostBack) 
        { 
          NameValueCollection nvc = Request.Form; 

          string username = nvc["username"]; 
          string password = nvc["password"]; 
          Hydra.WebService1SoapClient client = new Hydra.WebService1SoapClient(); 

          string sid = client.LoginSession(username, password); 

          if (sid != "Incorrect details") 
            HttpContext.Current.Session["loggedin"] = true; 
          else 
            HttpContext.Current.Session["loggedin"] = false; 
        } 
      } 

下面是我的顯示頁面顯示會話數據。

 <% if (HttpContext.Current.Session["loggedin"] == null || (bool)HttpContext.Current.Session["loggedin"] == false) 
       { %> 
      <a class="menu" href="register.php">Create Account</a> 
      <% } else { %> 
      <a class="menu" href="hd.php">Dashboard</a>&nbsp;<a class="menu" href="ticketlist.php">Tickets</a> <a class="menu" href="admin/index.php">Admin</a> 
      <% } %> 

      Value: <% Response.Write("" + HttpContext.Current.Session["loggedin"] + " <br /> SID? " + HttpContext.Current.Session.SessionID); %> 

我已經測試了這個在我的本地IIS系統上,它工作正常(會話是持久的)。

那麼我的問題是: 在AWS上做什麼不像InProc會話狀態存儲或者是否存在其他原因?

+0

您是否在負載均衡器後面運行多個ec2實例?還是隻有一個? – 2014-12-04 19:11:42

+0

@ E.J.Brennan不是它的單個實例沒有負載均衡,max iis workers設置爲1,iis設置被檢查爲會話狀態不正常,20分鐘超時,這些請求在一分鐘內。 – Ben 2014-12-04 22:42:12

+0

如果您使用的是InProc會話狀態,那麼只需切換到Sql數據庫以保持會話。它更可靠,而且您不必擔心部署會話。它也很容易設置Sql Database支持的ASP.NET會話狀態。 – 2014-12-05 01:21:22

回答

2

如果您運行的是單個ec2服務器,則應該沒有任何獨特之處;我在AWS上一直這樣做,它的行爲與非AWS服務器完全相同。

您是否有機會在微型實例上運行,將其推向極限,並且它會不斷回收 - 從而失去其狀態?

+0

我使用t2微...這是可能發生了什麼,雖然我禁用了應用程序池回收.. 。我會嘗試一次,我得到早上的機會,回到你身邊:) – Ben 2014-12-04 23:03:12

+0

雖然這看起來像是一個希望的明珠,我已經測試過它,我有400MB的可用RAM,所以我看不到它在那裏。 我添加了一個global.asax並寫出到每個事件的文件,它看起來像運行每個頁面加載的所有事件。我不知道這是否有幫助? – Ben 2014-12-05 09:39:37

+0

看來我的問題是與SOAP調用相同的應用程序,導致它與會話做一些時髦的東西 當我註釋'Hydra.WebService1SoapClient client = new Hydra.WebService1SoapClient();'會話持續 – Ben 2014-12-05 10:38:57