有时会在负载平衡服务器和SQL上使ASP会话变量变空

时间:2019-06-16 19:27:02

标签: c# asp.net sql-server load-balancing

我创建了一个在ASP.Net和Microsoft SQL Server 2016 Standard Edition上运行的基于Web的应用程序。该应用程序本地托管在IIS上。我有两个正在运行应用程序的服务器,并且在这两个服务器上,Always On Availablity组中有SQL Server。有一个硬件负载平衡器使用循环算法发送请求,因此这就是我将Session设置为数据库的原因。两台计算机上的机器密钥相同,并且IIS应用程序池设置为仅在午夜刷新一次。两台服务器上的应用程序路径都相同,并且群集IP引用了SQL Always On。

问题在于会话变量有时会变为空。会话变量不多,并且都是String类型的。

这是我的web.config部分。

  <connectionStrings>
    <add name="SQLConnectionString" connectionString="server=SERVERIP,PORT;Database=DATABASE;uid=USERNAME;pwd=PASSWORD;Max Pool Size=10000" />
  </connectionStrings>

  <pages controlRenderingCompatibilityVersion="4.0" clientIDMode="AutoID" enableSessionState="true" />
  <sessionState mode="SQLServer" allowCustomSqlDatabase="true" sqlConnectionString="SQLConnectionString" cookieless="AutoDetect" timeout="10" />
  <machineKey decryptionKey="DECRYPTION KEY" validationKey="VALIDATION KEY" />

这是我访问会话变量的方式。

//Intermediate steps are omitted obviously like creating captcha, login validation, etc.

Session["captcha"] = captcha.ToString();

if (Session["captcha"].ToString() == txtCaptcha.Text)
{
    //ValidateLogin
    //if credentials are correct
    {
        Session["Uname"] = username.Text.ToLower().Trim();
        Session["HomeDir"] = GetHomeDirectory(Session["Uname"].ToString());
    }
}

// on another page
lblUname.Text = Session["Uname"].ToString();
String homedir = Session["Homedir"].ToString(); 

会话变量变为null的原因是什么?解决方案是什么?

0 个答案:

没有答案