ASP.NET Core 监听SQL Server数据库的实时信息
1.开发环境:
- 开发工具:Visual Studio 2019
- 数据库:SQL Server2012
- 开发环境:.Net Core 3.1
2.使用技术:
- Signalr:实现消息推送
- SqlDependency:通过它的OnChangeEventHandler事件去监听数据库的波动【只针对SQL Serer】
- Microsoft.EntityFrameworkCore:连接数据库
3.业务逻辑(虽然最后没做成,但是这技术我还学会了)
开发场景:
客户需要每一个参加展会的人,签到时候,需要在展会的大屏幕实时显示签到人的信息。
思考:
如果让以前的我做,一想到就是做AJAX异步请求数据,设置循环间隔时间。但是这样会有问题,第一如果时间设置太长,无法实现实时,如果时间设置太短,会发送很多无效的请求大量占用资源,这个时间就无法去定义。
思路:
此时,我在想,如果要是【有人盯着】数据库,当数据有变化的时候,【有人通知】能通知我们,这样岂不是完美了,敢想就敢干,Just Doing!
4.使用的技术讲解
有人盯着:
通过在百度海洋的搜索,了解到了SqlDependency可以实现这个效果,连接数据库之后,编写查询语句【有注意点,后面讲】,然后使用SqlCommand初始化连接对象和执行的语句,在将SqlDependency初始化填入SqlCommand对象,然后给SqlDependency添加事件,然后执行SqlCommand命令。当数据库的某张表数据变动,就会触发SqlDependency添加的事件。
有人通知:
Signalr可以实现推送消息,应用程序启动之后,浏览器和服务器会建立一个连接(Signalr不懂可以百度看看原理),当服务器有什么需要推送的,可以推送指定的人、组,以及所有人。
5.效果展示

6.注意事项
- 编写的SQL:查询语句中不能使用 *,表名要加[dbo].[xx]
- 在你的数据库中需要开启BROKER:
ALTER DATABASE [你需要监听的数据库的表名称] SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE [你需要监听的数据库的表名称] SET ENABLE_BROKER;
在数据库执行命上面两个命令。
- 创建GlobalHubServer服务,用户获取实例对象(当我们监听到数据库变动的时候,我们需要通知,可以通过GlobalHubServer和我们的ChatHub实现依赖注入,这样容器给我创建了一个实例,我们只需要注入就行了)。
- Signalr中自定义的方法,注意格式驼峰命令法
- SqlDependency需要提起开启
7.参考文档
- 利用SignalR实现实时推送信息功能
他是使用ASP.NET MVC开发的,所有他有些东西,我在ASP.NET Core是用不了【GlobalHost】,这个是用来获取实例对象,我采用是GlobalHubServer代替 - 启用数据库的 Service Broker
- GlobalHubServer由来
- Get started with ASP.NET Core SignalR
8.不足的地方
这个只是测试代码,如果在实际情况中,不知道会不会出问题,打算使用Redis做缓存,处理并发的请求,后面有时间写个API,进行接口压力测试一下效果,如果有好的方案,欢迎来探讨!
9.结尾
为什么没贴代码了,你看看我给的几个文档就可以做出来,动手实践才是硬道理,如果有功能实现不了的,可以给我留言!
ASP.NET Core 监听SQL Server数据库的实时信息的更多相关文章
- 使用SqlDependency实时监听SQL server数据库变化并执行事件
sql server设置:ALTER DATABASE <DatabaseName> SET ENABLE_BROKER;语句让相应的数据库启用监听服务,以便支持SqlDependency ...
- ASP.NET Excel导入到SQL Server数据库
本文转自:http://www.cnblogs.com/lhking/archive/2009/06/08/1499002.html 提供把Excel里的数据导入到SQL Server 数据库,前提是 ...
- 找到SQL Server数据库历史增长信息
很多时候,在我们规划SQL Server数据库的空间,或向存储方面要空间时,都需要估算所需申请数据库空间的大小,估计未来最简单的办法就是看过去的趋势,这通常也是最合理的方式. 通常来讲 ...
- 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(2)
第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 为Domain Model添加约束 前一部分, 我们已经把数据库创建出来了. 那么我们先看看这个数据库 ...
- 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(1)
最近使用vscode比较多. 学习了一下如何在mac上使用vscode开发asp.netcore项目. 这里是我写的关于vscode的一篇文章: https://www.cnblogs.com/cgz ...
- 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(3)
第一部分: http://www.cnblogs.com/cgzl/p/8478993.html 第二部分: http://www.cnblogs.com/cgzl/p/8481825.html 由于 ...
- SQL Server 数据库获取架构信息
得到数据库存储过程列表: select * from dbo.sysobjects where OBJECTPROPERTY(id, N'IsProcedure') = 1 order by name ...
- TransactionScope事务处理方法介绍及.NET Core中的注意事项 SQL Server数据库漏洞评估了解一下 预热ASP.NET MVC 的VIEW [AUTOMAPPER]反射自动注册AUTOMAPPER PROFILE
TransactionScope事务处理方法介绍及.NET Core中的注意事项 作者:依乐祝 原文链接:https://www.cnblogs.com/yilezhu/p/10170712.ht ...
- .NET跨平台之旅:升级至ASP.NET 5 RC1,Linux上访问SQL Server数据库
今天微软正式发布了ASP.NET 5 RC1(详见Announcing ASP.NET 5 Release Candidate 1),.NET跨平台迈出了关键一步. 紧跟这次RC1的发布,我们成功地将 ...
随机推荐
- ASP.NET 开源导入导出库Magicodes.IE 多Sheet导入教程
多Sheet导入教程 说明 本教程主要说明如何使用Magicodes.IE.Excel完成多个Sheet数据的Excel导入. 要点 多个相同格式的Sheet数据导入 多个不同格式的Sheet数据导入 ...
- Oracle Solaris 10图文安装
文章目录 1. 虚拟机软件 2. solaris 10镜像 3. 安装OS 4. 允许远程使用root用户登录SSH 5. bash配置 5.1. 修改bash 5.2. 修改提示符 6. CRT连接 ...
- (私人收藏)红色项目工作计划总结汇报PPT模板
红色项目工作计划总结汇报PPT模板 https://pan.baidu.com/s/1fr-PB7ieveSIqSXrB0YXsgbgdc
- css样式大全,完整的Css样式大全(整理)
CSS样式被称为为“层叠样式表”,是一种网页制作做不可或缺的技术,是用于装饰网页,达到设计效果的一种样式语言,下面将整理一下css常用样式: 字体属性:(font) 大小 {font-size: x- ...
- (三)ansible playbook
一,YAML语法 YAML的语法和其他高阶语言类似并且可以简单表达清单.散列表.标量等数据结构.(列表用横杆表示,键值对用冒号分割,键值对里又可以嵌套另外的键值对) YAML文件扩展名通常为.yaml ...
- 小烈送菜——奇怪的dp
小烈送菜 题目描述 小烈一下碰碰车就被乐满地的工作人员抓住了.作为扰乱秩序的惩罚,小烈必须去乐满地里的"漓江村"饭店端盘子. 服务员的工作很繁忙.他们要上菜,同时要使顾客们尽量高兴 ...
- 震惊!慎老师怒吃pks并大呼:一口就吃完了!
慎老师吃pks是怎么回事呢?慎老师相信大家都很熟悉,但是慎老师吃pks是怎么回事呢,下面就让小编带大家一起了解吧. 慎老师吃pks,其实就是慎老师把花花蛤吃了,大家可能会很惊讶慎老师怎么会吃花花蛤呢? ...
- .Net Core微服务入门全纪录(八)——Docker Compose与容器网络
Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 前言 上一篇[.Net Core微服务入门全纪录(七)--IdentityServer4-授权认证]中使用IdentityServer4 ...
- day16 函数对象与闭包函数
目录 一.函数对象 1.1函数可以被引用 1.2函数可以作为容器类型的元素 1.3函数可以作为参数传入另外一个函数 1.4函数的返回值可以是一个函数 二.闭包函数 1 什么是闭包函数 2 闭包函数的用 ...
- 谈谈你对this的理解
this的指向不是在编写时确定的,而是在执行时确定的,同时,this不同的指向在于遵循了一定的规则. 1.默认情况下,指向全局,浏览器的话就是指向window 2.如果函数被调用的位置存在上下文,那么 ...