<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ASP.NET Core 監(jiān)聽SQL Server數(shù)據(jù)庫的實時信息

          共 1626字,需瀏覽 4分鐘

           ·

          2020-10-18 01:40

          1.開發(fā)環(huán)境:

          • 開發(fā)工具:Visual Studio 2019

          • 數(shù)據(jù)庫:SQL Server2012

          • 開發(fā)環(huán)境:.Net Core 3.1

          2.使用技術(shù):

          • Signalr:實現(xiàn)消息推送

          • SqlDependency:通過它的OnChangeEventHandler事件去監(jiān)聽數(shù)據(jù)庫的波動【只針對SQL Serer】

          • Microsoft.EntityFrameworkCore:連接數(shù)據(jù)庫

          3.業(yè)務邏輯(雖然最后沒做成,但是這技術(shù)我還學會了)

          開發(fā)場景:
          客戶需要每一個參加展會的人,簽到時候,需要在展會的大屏幕實時顯示簽到人的信息。

          思考:
          如果讓以前的我做,一想到就是做AJAX異步請求數(shù)據(jù),設(shè)置循環(huán)間隔時間。但是這樣會有問題,第一如果時間設(shè)置太長,無法實現(xiàn)實時,如果時間設(shè)置太短,會發(fā)送很多無效的請求大量占用資源,這個時間就無法去定義。

          思路:
          此時,我在想,如果要是【有人盯著】數(shù)據(jù)庫,當數(shù)據(jù)有變化的時候,【有人通知】能通知我們,這樣豈不是完美了,敢想就敢干,Just Doing!

          4.使用的技術(shù)講解

          有人盯著:

          通過在百度海洋的搜索,了解到了SqlDependency可以實現(xiàn)這個效果,連接數(shù)據(jù)庫之后,編寫查詢語句【有注意點,后面講】,然后使用SqlCommand初始化連接對象和執(zhí)行的語句,在將SqlDependency初始化填入SqlCommand對象,然后給SqlDependency添加事件,然后執(zhí)行SqlCommand命令。當數(shù)據(jù)庫的某張表數(shù)據(jù)變動,就會觸發(fā)SqlDependency添加的事件。

          有人通知:

          Signalr可以實現(xiàn)推送消息,應用程序啟動之后,瀏覽器和服務器會建立一個連接(Signalr不懂可以百度看看原理),當服務器有什么需要推送的,可以推送指定的人、組,以及所有人。

          5.效果展示

          6.注意事項

          • 編寫的SQL:查詢語句中不能使用 *,表名要加[dbo].[xx]

          • 在你的數(shù)據(jù)庫中需要開啟BROKER:

          ALTER DATABASE [你需要監(jiān)聽的數(shù)據(jù)庫名稱] SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
          ALTER DATABASE [你需要監(jiān)聽的數(shù)據(jù)庫名稱] SET ENABLE_BROKER;

          在數(shù)據(jù)庫執(zhí)行命上面兩個命令。

          • 創(chuàng)建GlobalHubServer服務,用戶獲取實例對象(當我們監(jiān)聽到數(shù)據(jù)庫變動的時候,我們需要通知,可以通過GlobalHubServer和我們的ChatHub實現(xiàn)依賴注入,這樣容器給我創(chuàng)建了一個實例,我們只需要注入就行了)。

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

          • SqlDependency需要提起開啟

          7.參考文檔

          • 利用SignalR實現(xiàn)實時推送信息功能
            他是使用ASP.NET MVC開發(fā)的,所有他有些東西,我在ASP.NET Core是用不了【GlobalHost】,這個是用來獲取實例對象,我采用是GlobalHubServer代替

          • 啟用數(shù)據(jù)庫的 Service Broker

          • GlobalHubServer由來

          • Get started with ASP.NET Core SignalR

          8.不足的地方

          這個只是測試代碼,如果在實際情況中,不知道會不會出問題,打算使用Redis做緩存,處理并發(fā)的請求,后面有時間寫個API,進行接口壓力測試一下效果,如果有好的方案,歡迎來探討!

          9.結(jié)尾

          為什么沒貼代碼了,你看看我給的幾個文檔就可以做出來,動手實踐才是硬道理,如果有功能實現(xiàn)不了的,可以給我留言!

          原文地址:https://www.cnblogs.com/2828sea/p/13402532.html

          如果你覺得本文對你有幫助,請點擊“推薦”,謝謝。


          瀏覽 68
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天日天天碰 | 免费a视频 | 欧美性最猛性XXXXX黑白配 | 久热这里只有精品89 | 逼逼免费视频 |