DBの更新を常に監視するような処理を実装したいです。
非同期通信とはDBを常に監視させるような処理を実装できるのでしょうか?
DB が更新されたらリアルタイムでその結果をクライアントが見ている画面に反映したいということだと理解していますが、それを「非同期通信」で実現できるということはありません。
ただし、定期的に(例えば 1 秒ごとに)クライアントから Web サーバーに要求を送信し、その応答を見てもらうということならできますので、それでよければ話は簡単ですが。
でも、やりたいことはそれとは違いますよね? Web サーバーに負担をかけないよう、DB が更新された時に限りクライアントに更新後のデータを送りたいのでは?
その場合、課題は (1) DB から更新されたという通知を受け取る仕組みの構築、(2) Web サーバーからクライアントにその変更をリアルタイムに通知する仕組みの構築・・・という 2 つですが、普通の ASP.NET Coer MVC アプリではその 2 つともできません。
まず、(1) ですが、DB が SQL Server で .NET Framework 版の ASP.NET アプリであれば SqlDependency、SqlCacheDependency クラスを利用できそうですが、ASP.NET Core ではサポートされてないという問題があります。(SQL Server 以外でどのようにできるかは自分は考えたこともなく分かりません)
次に (2) ですが、HTTP 通信はクライアントの要求に応じて Web サーバーが応答を返すというのが基本です。なので、普通に HTTP 通信を行う普通の Web アプリではできません。
ただし、ASP.NET であれば、SignalR というライブラリを利用すると、クライアントからの要求をサーバーが待機するのではなく、接続されているクライアントにコンテンツをプッシュすることができるようになります。
・・・が、そこまでやる気はないのでは? 特に上記 (1) が問題かと。
.NET Framework では SqlDependency がサポートされていますので、MVC5 の例として以下の記事があります。(検証などはしてませんので上記の記事のアプリが期待通り動くかどうかは不明ですが)
ASP.NET MVC 5 SignalR, SqlDependency and EntityFramework 6
https://www.codeproject.com/Tips/1075852/ASP-NET-MVC-SignalR-SqlDependency-and-EntityFramew
DB が SQL Server であれば、Core で進めるよりは、SqlDependency、SqlCacheDependency クラスを利用できる .NET Framework で進める方が道は開けているのは確かだと思います。
【追記】
NuGet で System.Data.SqlClient をインストールすれば ASP.NET Core で SqlDependency は使えるようです。
という訳で、SqlDependency によるクエリ通知と ASP.NET Core SiganlR と連携できるか検証してみました。結果は OK でした。
以下にその記事を紹介しておきます。参考になれば幸いです。
ASP.NET Core で SqlDependency
http://surferonwww.info/BlogEngine/post/2022/01/01/use-of-sqldependency-in-aspnet-core-application.aspx