В настоящее время мы больше не используем sessionState, теперь мы полагаемся на файлы cookie с зашифрованными данными, которые мы раньше сохраняли в сеансе.
У нас была эта функция, которая отвечала за сохранение данные в сеансе, но в настоящее время мы передаем только пустую строку в качестве параметра значения.
Код: Выделить всё
public static void SaveSession(object session_name, object value)
{
HttpContext context = HttpContext.Current;
context.Session.Add(session_name.ToString(), value);
}
В настоящее время это работает нормально (используется пустая строка, пока мы не исправим эту проблему). Но всякий раз, когда я комментирую этот код и устанавливаю для sessionState значение mode="Off" в Web.config, многие мои действия начинают вызываться дважды. И из-за этого он начинает выдавать много ошибок, когда пытается получить что-либо из БД, потому что действие, которое было выполнено первым, открывает БД и делает то, что ему нужно, а тем временем другой поток пытается прочитать то же действие до завершения первого (это не асинхронное действие). Поскольку первый еще не закрыл БД, второй выходит из строя, и это нарушает код. Это пример ошибки, которую я получаю:
Код: Выделить всё
System.InvalidOperationException: 'ExecuteReader requires an open and available Connection. The connection's current state is connecting.'
И когда я проверяю свой SQL-сервер, в этой таблице (
), я вижу, что одновременно создается множество сеансов (проверяя столбец session_id), и в конечном итоге оно достигает максимума, и все останавливается. Этого не происходит, когда я оставляю sessionState включенным.
Помните, что все работает, пока я оставляю sessionState включенным и передаю этому действию пустую строку. Ничто другое больше не использует это действие, поэтому, когда я его комментирую, я все еще могу скомпилировать проект и все остальное. Будем очень признательны за любые идеи!
Подробнее здесь:
https://stackoverflow.com/questions/790 ... lled-twice