ASP.NET Core 監聽SQL Server資料庫的實時資訊
- 2020 年 7 月 30 日
- 筆記
- Asp.Net Core
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.結尾
為什麼沒貼程式碼了,你看看我給的幾個文檔就可以做出來,動手實踐才是硬道理,如果有功能實現不了的,可以給我留言!