【问题标题】:ASP.NET Session persistance on AWS EC2AWS EC2 上的 ASP.NET 会话持久性
【发布时间】:2014-12-04 17:22:34
【问题描述】:

我尝试使用 Amazon Web Services EC2 来测试我正在开发的 IIS/ASP.NET 应用程序,并且我的登录工作正常,但 ASP.NET 会话似乎在重新加载页面或移动到另一个页面。

我的登录表单页面中的 Page_Load 代码(会话设置正确,直到我移动页面或刷新登录表单页面)

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 会话状态存储还是有其他问题的原因?

【问题讨论】:

  • 您是否在负载均衡器后面运行多个 ec2 实例?还是只有一个?
  • @E.J.Brennan 不,它是单个实例,没有负载平衡,最大 iis 工作人员设置为 1,iis 设置检查会话状态是否为 improc,超时 20 分钟,这些请求在一分钟内。
  • 如果您使用 InProc 会话状态,则只需切换到 Sql 数据库以保持会话。它更可靠,您不必担心部署会杀死会话。设置 Sql 数据库支持的 ASP.NET 会话状态也非常容易。
  • 看来我的问题与对同一个应用程序的 SOAP 调用有关,导致它在会话中做一些时髦的事情

标签: c# asp.net session amazon-web-services amazon-ec2


【解决方案1】:

如果您运行的是单个 ec2 服务器,它应该没有什么独特之处;我一直在 AWS 上这样做,它的行为与非 AWS 服务器完全一样。

您是否有机会在微实例上运行,将其推向极限,并且不断循环利用 - 从而失去其状态?

【讨论】:

  • 我正在使用 t2 micro...尽管我禁用了应用程序池回收,但可能是这种情况...我会在早上第一次尝试并回复您:)
  • 虽然这似乎是一颗希望之珠,但我已经对其进行了测试,并且我有 400mb 的可用 RAM,所以我看不到它的存在。我添加了一个 global.asax 并为每个事件写出一个文件,看起来它正在运行每个页面加载的所有事件。我不知道这是否有帮助?
  • 看来我的问题与对同一个应用程序的 SOAP 调用有关,导致它在会话中做一些时髦的事情当我注释掉 Hydra.WebService1SoapClient client = new Hydra.WebService1SoapClient(); 时,会话仍然存在
猜你喜欢
  • 2012-08-17
  • 2023-01-07
  • 2018-09-17
  • 1970-01-01
  • 2016-02-02
  • 2017-05-05
  • 2017-09-08
  • 1970-01-01
  • 2016-09-30
相关资源
最近更新 更多