Событие SqlDependency OnChange срабатывает много раз для каждого отдельного события в базе данных
Я разрабатываю систему оповещения, используя экземпляр sqldependency и SignalR, проблема я не могу заниматься, когда я изменить значение атрибута "IsOnline" в ДБ значение true или false в зависимости от статуса участника, onChange события пожары много раз, первый раз, когда новый пользователь войти я получаю два уведомления, то второй раз я становлюсь все больше похож на 4 потом еще потом еще. Количество уведомлений увеличивается каждый раз, когда новый вход или выход из системы. Я уверен, что проблема в SqlDependency, а не в SignalR, я собираюсь поделиться с вами частью своего кода.
[System.Web.Services.WebMethod] public static IEnumerable<AttendeeList> GetAllUsers() { var AttendeeList = new List<AttendeeList>(); try { using (var connection = new SqlConnection(_connString)) { connection.Open(); string str = ""; str += "SELECT [AttendeeID], "; str += " [IsAllowToUploadDocuments],"; str += " [IsOnline], "; str += " [AttendeeTypeName],"; str += " [UserName] "; str += " FROM [dbo].[Meeting_Attendees] "; str += " INNER JOIN [dbo].[aspnet_Users] ON [aspnet_Users].[UserId] = [Meeting_Attendees].[AttendeeID] "; str += " INNER JOIN [dbo].[AttendeeType] ON [dbo].[AttendeeType].[AttendeeTypeID] = [dbo].[Meeting_Attendees].[AttendeeTypeID] "; str += " WHERE [MeetingID]=@MeetingID ORDER BY [IsOnline] DESC"; using (var command = new SqlCommand(@str, connection)) { SqlParameter prm = new SqlParameter("@MeetingID", SqlDbType.Int); prm.Direction = ParameterDirection.Input; prm.DbType = DbType.Int32; prm.Value = Convert.ToInt32(Properties.Settings.Default.MeetingID); command.Parameters.Add(prm); command.Notification = null; var dependency = new SqlDependency(command); dependency.OnChange += new OnChangeEventHandler(dependencyUsers_OnChange); if (connection.State == ConnectionState.Closed) connection.Open(); var reader = command.ExecuteReader(); while (reader.Read()) { AttendeeList.Add(item: new AttendeeList { UserName = (string)reader["UserName"], UserType = (string)reader["AttendeeTypeName"], IsOnline = (bool)reader["IsOnline"], IsAllowToUploadDocuments = (bool)reader["IsAllowToUploadDocuments"], IsCurrentUser = true ? (Guid)reader["AttendeeID"] == new Guid(Properties.Settings.Default.UserID.ToString()) : false }); } } } } catch { } return AttendeeList; } private static void dependencyUsers_OnChange(object sender, SqlNotificationEventArgs e) { if (e.Type == SqlNotificationType.Change && e.Info == SqlNotificationInfo.Update) { //Call SignalR MessagesHub.UpdateUsers(); } }