SignalR不会通知数据库更改

时间:2019-10-27 05:12:27

标签: c# signalr sqldependency

当数据库发生更改时,我需要通知Web用户。

我正在使用它来注册事件:

    [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();调用指令后,立即以“ Subscribe”类型调用OnSqlDependencyChange事件。但是,在教程的代码中,仅当表发生更改时才调用该事件。在这种情况下,将使用“更改”类型调用该事件。

数据库已启用代理。

可能会发生什么?谢谢

0 个答案:

没有答案