Я создал веб-приложение, работающее на ASP.Net и Microsoft SQL Server 2016 Standard Edition.Приложение размещено локально на IIS.У меня есть два сервера, на которых работает приложение, и на этих двух серверах есть SQL-серверы в группе «Всегда в наличии».Существует аппаратный балансировщик нагрузки, который отправляет запросы с использованием алгоритма циклического перебора, поэтому я настроил Session для базы данных.Ключ компьютера одинаков на обоих компьютерах, а пул приложений IIS настроен на обновление только один раз в полночь.Пути приложения одинаковы как на серверах, так и на SQL Always On ссылается IP-адрес кластера.
Проблема в том, что переменные сеанса иногда становятся нулевыми.Существует не так много переменных сеанса, и все они имеют тип 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();
В чем причина того, что переменная сеанса станет нулевой, и каково будет решение?