ASP.NET Core监听SQL Server数据库的实时信息

一、开发环境

二、使用技术

  • Signalr:实现消息推送

  • SqlDependency:通过它的 OnChangeEventHandler 事件去监听数据库的波动【只针对 SQL Serer】

  • Microsoft.EntityFrameworkCore:连接数据库

三、业务逻辑(虽然最后没做成,但是这技术我还学会了)

开发场景:客户需要每一个参加展会的人,签到时候,需要在展会的大屏幕实时显示签到人的信息。

思考:如果让以前的我做,一想到就是做 AJAX 异步请求数据,设置循环间隔时间。但是这样会有问题,第一如果时间设置太长,无法实现实时,如果时间设置太短,会发送很多无效的请求大量占用资源,这个时间就无法去定义。

思路:此时,我在想,如果要是【有人盯着】数据库,当数据有变化的时候,【有人通知】能通知我们,这样岂不是完美了,敢想就敢干,Just Doing!

四、使用的技术讲解

有人盯着:通过在百度海洋的搜索,了解到了 SqlDependency 可以实现这个效果,连接数据库之后,编写查询语句【有注意点,后面讲】,然后使用 SqlCommand 初始化连接对象和执行的语句,在将 SqlDependency 初始化填入 SqlCommand 对象,然后给 SqlDependency 添加事件,然后执行 SqlCommand 命令。数据库的某张表数据变动,就会触发 SqlDependency 添加的事件。

有人通知:Signalr可以实现推送消息,应用程序启动之后,浏览器和服务器会建立一个连接(Signalr不懂可以百度看看原理),当服务器有什么需要推送的,可以推送指定的人、组,以及所有人。

五、效果展示

ASP.NET Core 监听 SQL Server 数据库的实时信息

ASP.NET Core 监听 SQL Server 数据库的实时信息

六、注意事项

  • 编写的 SQL:查询语句中不能使用 *,表名要加[dbo].[xx]

  • 在你的数据库中需要开启 BROKER:

ALTER DATABASE [你需要监听的数据库的表名称] SET NEW_BROKER
WITH ROLLBACK IMMEDIATE;

ALTER DATABASE [你需要监听的数据库的表名称] SET ENABLE_BROKER;

在数据库执行命上面两个命令。

  • 创建 GlobalHubServer 服务,用户获取实例对象(当我们监听到数据库变动的时候,我们需要通知,可以通过 GlobalHubServer 和我们的 ChatHub 实现依赖注入,这样容器给我创建了一个实例,我们只需要注入就行了)。

  • Signalr中自定义的方法,注意格式驼峰命令法

  • SqlDependency 需要提起开启

七、参考文档

 利用 SignalR 实现实时推送信息功能

  • 启用数据库的 Service Broker

--is_broker_enabled 为 0 未启用,为 1 启用 SELECT name,is_broker_enabled FROM sys.databases WHERE name = 'DBNAME'

ALTER DATABASE DbName SET NEW_BROKER WITH ROLLBACK IMMEDIATE;

ALTER DATABASE DbName SET ENABLE_BROKER;
  • GlobalHubServer 由来 

    Get started with ASP.NET Core SignalR

八、不足的地方

 这个只是测试代码,如果在实际情况中,不知道会不会出问题,打算使用 Redis 做缓存,处理并发的请求,后面有时间写个 API,进行接口压力测试一下效果,如果有好的方案,欢迎来探讨!

九、结尾

为什么没贴代码了,你看看我给的几个文档就可以做出来,动手实践才是硬道理,如果有功能实现不了的,可以给我留言


转自:喜欢吃鱼的青年
cnblogs.com/2828sea/p/13402532.html

© 版权声明

☆ END ☆
喜欢就点个赞吧
点赞0 分享
图片正在生成中,请稍后...