Signalr 核心2.1信号器和SQLDependency

Signalr 核心2.1信号器和SQLDependency,signalr,sqldependency,asp.net-core-2.1,Signalr,Sqldependency,Asp.net Core 2.1,是否有任何核心2.1示例可用于将SignalR与SQLDependency一起使用。 确实启用了代理等,但从未获得任何更改事件触发的依赖项。仅触发事件订阅。 当MS-SQL数据库表Cities在后端发生更改时,我希望看到更改立即反映在客户端网页上,而不必刷新/重新加载页面 //在ConfigureServices中启动应用程序时启动依赖项 Start(Configuration.GetConnectionString(“DefaultConnection”) 使用Microsoft.AspNet

是否有任何核心2.1示例可用于将SignalR与SQLDependency一起使用。 确实启用了代理等,但从未获得任何更改事件触发的依赖项。仅触发事件订阅。 当MS-SQL数据库表Cities在后端发生更改时,我希望看到更改立即反映在客户端网页上,而不必刷新/重新加载页面

//在ConfigureServices中启动应用程序时启动依赖项 Start(Configuration.GetConnectionString(“DefaultConnection”)

使用Microsoft.AspNetCore.signal;
使用signar_Test4.Data;
使用SignalR_Test4.0集线器;
使用System.Collections.Generic;
使用System.Data.SqlClient;
名称空间信号器\u Test4.Models
{
公共级城市报告
{
私有只读应用程序的bContext\u上下文;
私有只读IHubContext\u hubcontext;
公共城市报告(ApplicationDbContext上下文,IHubContext hubcontext)
{
_上下文=上下文;
_hubcontext=hubcontext;
}
公共IEnumerable GetCities()
{
List listOf=新列表();
//listOf=_context.Cities;
使用(var conn=newsqlconnection(GlobalVar.connectionString))
{
conn.Open();
使用(var cmd=new SqlCommand(@“SELECT*FROM Cities”,conn))
{
cmd.Notification=null;
SqlDependency=新的SqlDependency(cmd);
dependency.OnChange+=dependency\u OnChange;
if(conn.State==System.Data.ConnectionState.Closed)
conn.Open();
var reader=cmd.ExecuteReader();
while(reader.Read())
{
添加(新城市{Id=(string)读卡器[“Id”]、名称{en=(string)读卡器[“Name{en”]、国家Id=(string)读卡器[“CountryId”]、代码=(string)读卡器[“Code”});
}
}
}
返回列表;
}
private void Dependency_OnChange(对象发送方,SqlNotificationEventArgs e)
{
if(e.Type==SqlNotificationType.Change)
{
_hubcontext.Clients.All.SendAsync(“GetCities”);
}
}
}
}

问题在以下范围内:

var cmd=new SqlCommand(@“选择Id,名称,国家Id,代码来自[dbo].Cities”,康涅狄格州)


它需要使用字段名(而不是*)以及由两部分组成的表名约定=>[dbo]。Cities

我使用的是相同的技术,但是我遇到了一个错误:当使用SqlDependency而不提供选项值时,SqlDependency.Start()必须在执行添加到SqlDependency实例的命令之前调用。注意:Service Broker在大多数SQL Azure级别上都不可用-因此,除非您有托管实例,否则请确保首先尝试,甚至可以在编写任何代码之前启用它!
using Microsoft.AspNetCore.SignalR;
using SignalR_Test4.Data;
using SignalR_Test4.Hubs;
using System.Collections.Generic;
using System.Data.SqlClient;

namespace SignalR_Test4.Models
{
    public class CityRepository
    {
    private readonly ApplicationDbContext _context;
    private readonly IHubContext<CityHub> _hubcontext;
    public CityRepository(ApplicationDbContext context, IHubContext<CityHub> hubcontext)
    {
        _context = context;
        _hubcontext = hubcontext;
    }

    public IEnumerable<City> GetCities()
    {
        List<City> listOf = new List<City>();
        //listOf = _context.Cities;

        using (var conn = new SqlConnection(GlobalVar.connectionString))
        {
            conn.Open();
            using (var cmd = new SqlCommand(@"SELECT * FROM Cities", conn))
            {
                cmd.Notification = null;
                SqlDependency dependency = new SqlDependency(cmd);
                dependency.OnChange += Dependency_OnChange;

                if (conn.State == System.Data.ConnectionState.Closed)
                    conn.Open();


                var reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    listOf.Add(new City { Id = (string)reader["Id"], Name_en = (string)reader["name_en"], CountryId = (string)reader["CountryId"], Code = (string)reader["Code"] });
                }
            }
        }
        return listOf;
    }
    private void Dependency_OnChange(object sender, SqlNotificationEventArgs e)
    {
        if (e.Type == SqlNotificationType.Change)
        {
            _hubcontext.Clients.All.SendAsync("GetCities");
        }
    }
}

}