Как определить количество пользователей на ASP.NET сайт (IIS)? А их информация?
есть ли способ определить количество пользователей, которые имеют Активные сеансы в ASP.NET заявление? У меня есть страница администратора/инструментов в определенном приложении, и я хотел бы отобразить информацию обо всех открытых сеансах, таких как количество сеансов и, возможно, адреса запрашивающих машин или другую информацию о учетных данных для каждого пользователя.
8 ответов
ASP.NET счетчики производительности как Активные сеансы сервера состояния (количество активных сеансов пользователя)должны помочь вам. Тогда вы можете просто чтение и отображение счетчиков производительности на странице администратора..
в глобальном.аспн
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
Application["OnlineUsers"] = 0;
}
void Session_Start(object sender, EventArgs e)
{
// Code that runs when a new session is started
Application.Lock();
Application["OnlineUsers"] = (int)Application["OnlineUsers"] + 1;
Application.UnLock();
}
void Session_End(object sender, EventArgs e)
{
// Code that runs when a session ends.
// Note: The Session_End event is raised only when the sessionstate
// mode is set to InProc in the Web.config file.
// If session mode is set to StateServer or SQLServer,
// the event is not raised.
Application.Lock();
Application["OnlineUsers"] = (int)Application["OnlineUsers"] - 1;
Application.UnLock();
}
Примечание: Приложение.Блокировка и применение.Методы разблокировки используются для предотвращения одновременного изменения этой переменной несколькими потоками.
В Интернете.config
убедитесь, что SessionState является "InProc" для этой работы
<system.web>
<sessionState mode="InProc" cookieless="false" timeout="20" />
</system.web>
В вашей .файл aspx
Visitors online: <%= Application["OnlineUsers"].ToString() %>
Примечание: код был первоначально скопирован из http://www.aspdotnetfaq.com/Faq/How-to-show-number-of-online-users-visitors-for-ASP-NET-website.aspx (ссылка больше не активна)
Если вы используете членство .net, вы можете использовать
Membership.GetNumberOfUsersOnline()
подробнее об этом: http://msdn.microsoft.com/en-us/library/system.web.security.membership.getnumberofusersonline.aspx
Если вы хотите реализовать тот же механизм самостоятельно, вы можете определить как класс CurrentUserManager и реализовать шаблон singleton здесь. Этот одноэлементный объект класса CurrentUserManager будет уникальным в AppDomain. В этом классе вы создадите его собственный экземпляр один раз, и вы запретите другим создавать новые экземпляры этого класса, скрывая его конструктор. Всякий раз, когда запрос приходит к этому объекту, этот единственный экземпляр даст ответ. Итак, если вы реализуйте список, который хранит записи каждого пользователя (когда пользователь входит, вы добавляете его в список; когда он выходит, вы удаляете его из списка). И, наконец, если вы хотите текущий счетчик пользователей, вы можете просто задать счетчик списка для этого одноэлементного объекта.
то, как я видел это в прошлом, добавляет дополнительный код к событию Session_OnStart в глобальном.файл asax для хранения информации агностическим способом сеанса, например, база данных или объект HttpApplicationState. В зависимости от ваших потребностей вы также можете использовать Session_OnEnd для удаления этой информации.
вы можете инициализировать и очистить некоторые из этих сведений, используя события Application_Start и Application_End.
страница администрирования может после этого прочитайте эту информацию и покажите статистику etc.
Это объясняется более подробно в http://msdn.microsoft.com/en-us/library/ms178594.aspx и http://msdn.microsoft.com/en-us/library/ms178581.aspx.
Вы можете использовать PerformanceCounter для получения данных из системы.Пространство имен диагностики. Это позволяет получить "Активные сеансы" и многое другое. Это позволяет получить от локального сервера, а также удаленного.
вот пример как это сделать на локальной машине
void Main()
{
var pc = new PerformanceCounter("ASP.NET Applications", "Sessions Active", "__Total__");
Console.WriteLine(pc.NextValue());
}
или для удаленного сервера вы бы сделали:
void Main()
{
var pc = new PerformanceCounter("ASP.NET Applications", "Sessions Active", "__Total__", "ServerHostName.domain");
Console.WriteLine(pc.NextValue());
}
счетчики производительности для ASP.NET обеспечивает полный список ASP.NET счетчики, которые вы можете контролировать
Google Analytics поставляется с API, который может быть реализован на вашем ASP.NET приложение MVC. Он имеет функциональность в реальном времени, поэтому текущее количество пользователей на вашем сайте можно отслеживать и возвращать в приложение.
если в качестве поставщика состояния сеанса используется sql server, этот код можно использовать для подсчета числа пользователей в сети:
SELECT Count(*) As Onlines FROM ASPStateTempSessions WHERE Expires>getutcdate()