В основном это работает, но иногда эти исключения встречаются (всегда на OnReconnected):SignalR 1.1.3 подсчета пользователей онлайн соединений, исключения и иногда не работает
System.IndexOutOfRangeException: Индекс был вне границ массива.
System.InvalidOperationException: коллекция была изменена; операция перечисления может не выполняться.
я думаю, чтобы узнать, что проблема (например, при попытке добавить элемент в Еогеасп в том же списке), но что я могу сделать, чтобы решить эту проблему?
Код:
public class UsersHub : Hub
{
private struct SignalRUser
{
public string ClientId { get; set; }
public string Username { get; set; }
}
static IList<SignalRUser> users = new List<SignalRUser>();
public override Task OnConnected()
{
this.AddUser();
return base.OnConnected();
}
public override Task OnDisconnected()
{
this.RemoveUser();
return base.OnDisconnected();
}
public override Task OnReconnected()
{
this.AddUser();
return base.OnReconnected();
}
private string GetClientId()
{
string clientId = "";
if (!(Context.QueryString["clientId"] == null))
{
clientId = Context.QueryString["clientId"].ToString();
}
if (clientId.Trim() == "")
{
clientId = Context.ConnectionId;
}
return clientId;
}
private void AddUser()
{
var user = Membership.GetUser();
string clientId = GetClientId();
if (!users.Any(x => x.ClientId == clientId))
{
users.Add(new SignalRUser
{
ClientId = clientId,
Username = user.UserName
});
}
}
private void RemoveUser()
{
string clientId = GetClientId();
users.Remove(users.FirstOrDefault(x => x.ClientId == clientId));
}
}