2015-07-22 6 views
0

Я использую таблицу (назовем ее T_User) полями, описывающими каждого пользователя. Одним из этих полей является «Статус», поле, которое обновляется до значения true при каждом входе пользователя (или если он уже зарегистрирован при подключении к моему веб-сайту) на моем веб-сайте и автоматически обновляется до значения false, когда пользователь покидает (независимо от того, выходит ли пользователь из системы или нет). Решение этой проблемы, с которой я столкнулся, использует Quartz.net для создания планировщика, который будет проверять всех пользователей session_id онлайн-пользователей, чтобы определить, жив ли он или нет! Моя проблема в том, что я не могу найти правильный способ определить, жив ли сеанс! Итак, как мне взять статус сеанса для каждого пользователя? Есть ли лучший способ достижения этой «функции»? благодарю вас за ответыАвтоматическое обновление статуса онлайн/оффлайн с использованием asp.net и C#

+0

Google для signalr –

ответ

0

Мне нужно что-то подобное для проекта. Я использовал SignalR, чтобы узнать, сколько текущих подключений было в моем веб-приложении.

Пример:

HUB

[HubName("trackingHub")] 
public class TrackingHub : Hub 
{ 
    public void SendCount() 
    { // Send the ConnectedUsers count to the caller 
     Clients.All.count(SignalRConnectionHandler.ConnectedUsers.Count); 
    } 

    public override Task OnConnected() 
    { 
     // When a user connects, add him to the HashSet 
     SignalRConnectionHandler.ConnectedUsers.Add(Context.ConnectionId); 
     SendCount(); 
     return base.OnConnected(); 
    } 

    public override Task OnDisconnected(bool stopCalled) 
    { 
     // When a user disconnects, remove him to the Hashset 
     SignalRConnectionHandler.ConnectedUsers.Remove(Context.ConnectionId); 
     SendCount(); 
     return base.OnDisconnected(stopCalled); 
    } 

    public override Task OnReconnected() 
    { 
     // When a user reconnects, Check if he is already in the Hashset, if not add him back in. 
     if (!SignalRConnectionHandler.ConnectedUsers.Contains(Context.ConnectionId)) 
     { 
      SignalRConnectionHandler.ConnectedUsers.Add(Context.ConnectionId); 
     } 

     return base.OnReconnected(); 
    } 

Обработчик соединения

public static class SignalRConnectionHandler 
{ 
    public static HashSet<string> ConnectedUsers = new HashSet<string>(); 
} 

Просмотр

$(function() { 
     var hub = $.connection.trackingHub; 

     hub.client.count = function(count) { 
      $('#count').html(count); // Append the connected users count to the page 
     } 

     // Connect the user to the Hub 
     $.connection.hub.start().done(function() { 
      console.log("connected"); 

     }); 
    }); 

Если вы добавите hub.start() в свой _layout. Теперь хеш ConnectedUsers будет содержать все подключенные пользовательские идентификаторы. Поскольку мы можем переопределить некоторые из методов на Hub, мы можем установить ConnectedUsers, когда кто-то подключается и отключается.

Как вы можете видеть, что я храню все в HashSet<T>, но вы можете хранить его в БД и т.д. (Пожалуйста, обратите внимание, что хранить его в памяти, как выше, как только IIS перерабатывает, то объект будет потеряна)

+0

есть другой способ без использования SignalR, поскольку я не могу настроить, как сделать эту работу ... – kasf

+0

На самом деле нет надежных результатов. Как вы узнаете, отключен ли клиент? В чем дело. Я мог бы помочь. –