Моя цель здесь - убедиться, что все вошедшие в систему пользователи не должны выходить из системы, если пул приложений останавливается или перезапускается.
Одним из способов является то, что я могу использовать прокси-сессии и напрямую сохранять их в базе данных, но это повлияет на производительность приложения, поэтому я не хочу этого делать.
Еще один способ, который я нашел, заключается в том, что я могу зарегистрировать объект класса, реализованный в IRegisteredObject, в среде хостинга.
public class SessionTracker : IRegisteredObject
{
//I created this class as singleton and exposed GetInstance method
public void Stop(bool immediate)
{
//Here i want to get all the sessions and store them in database
}
}
Зарегистрируйте его в глобальном объекте
public class Global : System.Web.HttpApplication
{
protected void Application_Start(Object sender, EventArgs e)
{
HostingEnvironment.RegisterObject(SessionTracker.GetInstance());
}
}
Я хочу получить все активные сессии приложения, чтобы я мог сохранить их в базе данных во время перезапуска или внезапной остановки пула приложений.
Теперь, когда мое приложение запустится, в этот момент я снова загружу все сохраненные в базе данных состояния сеансов, и все состояния сеансов будут действительными.
Также я обнаружил, что могу использовать события начала и окончания сеанса и добавлять сеансы в список объекта. Я не уверен, насколько он будет эффективен, поскольку он может занять больше памяти на стороне сервера.
Пожалуйста, предложите подход, с помощью которого я могу получить все сессии одновременно. Или это нормально, если я использую начало сеанса и событие окончания сеанса файла global.ascx.cs? Это повлияет на использование памяти?