Об изменении базы данных SignalR не уведомляет - PullRequest
0 голосов
/ 27 октября 2019

Мне нужно уведомить веб-пользователя об изменении базы данных.

Я использую это для регистрации события:

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2100:Review SQL queries for security vulnerabilities")]
    void RegisterForNotifications()
    {
        string connectionString = "";
        using (Repositories.GestionActivosEntities db = new Repositories.GestionActivosEntities())
            connectionString = db.Database.Connection.ConnectionString;

        connectionString = "Data Source=localhost;Initial Catalog=MyDatabase;Persist Security Info=True;Integrated Security=SSPI;MultipleActiveResultSets=true;Pooling=False;";
        string sqlQuery = @"SELECT [AlertaId]
                          ,[PadreId]
                          ,[UsuarioOrigenId]
                          ,[UsuarioDestinoId]
                          ,[AlertaOrigen]
                          ,[AlertaNombre]
                          ,[AlertaMensaje]
                          ,[AlertaMotivo]
                          ,[AlertaCreadoEn]
                          ,[AlertaEnviadoMail]
                          ,[AlertaLeidoPortal]
                      FROM [dbo].[Alerta]";

        using (var sqlConnection = new SqlConnection(connectionString))
        using (var sqlCommand = new SqlCommand(sqlQuery, sqlConnection))
        {
            sqlCommand.Notification = null;
            var sqlDependency = new SqlDependency(sqlCommand);
            sqlDependency.OnChange += OnSqlDependencyChange;
            if (sqlConnection.State == ConnectionState.Closed)
                sqlConnection.Open();
            sqlCommand.ExecuteNonQuery();
        }
    }

    void OnSqlDependencyChange(object sender, SqlNotificationEventArgs e)
    {
        if (e.Type == SqlNotificationType.Change)
        {
            SqlNotification?.Invoke(sender, e);
            RegisterForNotifications();
        }
    }

При отладке этот код выполняется правильно, однакоКогда я изменяю данные в этой таблице, OnSqlDependencyChange не вызывается.

С другой стороны, у меня есть учебник на этой странице: https://www.codeproject.com/Tips/1075852/ASP-NET-MVC-SignalR-SqlDependency-and-EntityFramew?msg=5672753#xx5672753xx

Код, который я использую, тот жекак учебник. Разница в том, что я жестко запрограммировал запрос и строку подключения.

Один факт привлек мое внимание.

В моем коде, когда sqlCommand.ExecuteNonQuery ();Инструкция вызывается, сразу же вызывается событие OnSqlDependencyChange с типом «Подписаться». Однако в коде учебника это событие вызывается только тогда, когда в таблице есть изменения. В этом случае событие вызывается с типом «Изменить».

В базе данных включен брокер.

Что может происходить? Спасибо

...