Signalr не запускает событие C# при изменениях в таблице БД
Я использую signalR для уведомления, т. е. когда запись вставляется в таблицу, я должен сообщить пользователю в своем приложении как новое уведомление. Мой код звучит примерно так:
I файл global.asax в Application_start():
SqlDependency.Start(@"data source=DESKTOP-591MN5Q\SQLEXPRESS01;initial catalog=Test_test;integrated security=True;");
Мой класс обслуживания уведомление ::
public static class Notification { static readonly string connString = @"data source=DESKTOP-591MN5Q\SQLEXPRESS01;initial catalog=Test_test;integrated security=True;"; internal static SqlCommand command = null; internal static SqlDependency dependency = null; public static string GetNotification() { try { var messages = new List<tblNotification>(); using (var connection = new SqlConnection(connString)) { connection.Open(); using (command = new SqlCommand(@"SELECT [NotificationId],[UserId],[IsSeen],[Message],[CreatedDate],[ActionID] FROM [dbo].[tblNotification]", connection)) { command.Notification = null; if (dependency == null) { dependency = new SqlDependency(command); dependency.OnChange += new OnChangeEventHandler(dependency_OnChange); } if (connection.State == ConnectionState.Closed) connection.Open(); var reader = command.ExecuteReader(); while (reader.Read()) { messages.Add(item: new tblNotification { NotificationId = (int)reader["NotificationId"], UserId = (int)reader["UserId"], IsSeen = (bool)reader["IsSeen"], Message = reader["Message"] != DBNull.Value ? (string)reader["Message"] : "", CreatedDate = (DateTime)reader["CreatedDate"], ActionID = (int)reader["ActionID"] }); } } } var jsonSerialiser = new JavaScriptSerializer(); var json = jsonSerialiser.Serialize(messages); return json; } catch (Exception ex) { return null; } } private static void dependency_OnChange(object sender, SqlNotificationEventArgs e) { if (dependency != null) { dependency.OnChange -= dependency_OnChange; dependency = null; } if (e.Type == SqlNotificationType.Change) { MyHub.Send(); } } }
Я понял, что при загрузке страницы будет вызван метод GetNotification (), который зарегистрирует метод dependency_OnChange() таким образом, что если какие-либо изменения будут сделаны в tblNotification, то dependency_OnChange() будет вызван.
Я выполнил приведенный ниже скрипт, чтобы включить отслеживание изменений:
ALTER DATABASE [Test_test] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE;
Но все же мой код не может вызвать метод dependency_OnChange() при вставке записи в таблицу.
Что я уже пробовал:
При первом выполнении метода GetNotification() команда.Уведомление = null. зависимость будет инициализирована. После выполнения строки var reader = command.ExecuteReader();, команда.Уведомление получит значение .