zoukankan      html  css  js  c++  java
  • 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.参考文档

    8.不足的地方

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

    9.结尾

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

  • 相关阅读:
    C语言实现链表
    获取两个数之间的随机数-java
    C#继承机制 多级继承
    C#继承机制 访问与隐藏基类成员
    C#继承机制 C#中的继承符合下列规则
    C#装箱与拆箱的研究
    C#箴言之用属性来访问类的私有成员
    C# 创建和初始化集合对象
    C# 常用函数和方法集汇总
    C# 多态与new关键字
  • 原文地址:https://www.cnblogs.com/2828sea/p/13402532.html
Copyright © 2011-2022 走看看