質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

2回答

1568閲覧

画面のデータを自動で更新したい

ronaldo

総合スコア9

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2021/12/11 18:35

編集2022/01/12 10:55

html内にDBのデータを表示し、DBの中身が変わったらhtml内の値も更新するというような機能を作りたいのですが、どうすれば実現できるでしょうか?(DBの更新を常に監視するような処理を実装したいです。)

非同期通信を用いるのかと思います。
色々調べて、非同期通信についてはイマイチ理解しきれていないのですが、非同期通信とはDBを常に監視させるような処理を実装できるのでしょうか?

ちなみに使おうとしている言語はC#,ASP.netです。

そもそも、非同期通信を用いるのか、全然別の機能を使うのかよくわかりませんが上記の方法がわかる方いらっしゃいますでしょうか?

特に自前のコードはないですが、よろしくおねがいします。

環境:
MVCの想定
OSはwindows,
visual studio16.10.4,
.net Core
SQL Server

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/12/11 23:35

DB は何ですか? SQL Server ですか? 何を作っているか (Web Forms? MVC? Web API? その他?) と開発環境 (OS, Visual Studio のバージョン、.NET Framework か Core のどっちかとそのバージョンなど) を書いてください。
ronaldo

2021/12/12 02:12

ご回答ありがとうございます。 MVCの想定,OSはwindows,visual studio16.10.4,.net Coreです。
退会済みユーザー

退会済みユーザー

2021/12/12 02:18

上記は質問欄を編集して追加情報として追記願います。あと、 DB は何ですか? SQL Server ですか? にも答えてください。
退会済みユーザー

退会済みユーザー

2022/01/02 01:16

NuGet で System.Data.SqlClient をインストールすれば ASP.NET Core で SqlDependency は使えるようです。詳しくは回答欄に追記しましたので見てください。
guest

回答2

0

ベストアンサー

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

投稿2021/12/12 03:39

編集2022/01/02 01:15
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ronaldo

2021/12/12 05:53

ありがとうございます。 質問の修正もしました。 とりあえずSignalR について調べてみようと思います。
退会済みユーザー

退会済みユーザー

2021/12/12 06:33 編集

どういう方向でいくか(あくまで上の (1) と (2) を ASP.NET Core で実装するのか、妥協案として定期的に更新するにとどめるのかなど)決まったら教えてください。
ronaldo

2021/12/12 07:58

ASP.netcoreで実装しようと思っています。
退会済みユーザー

退会済みユーザー

2021/12/12 08:11

あくまで上の (1) と (2) を ASP.NET Core で実装するということですね。それは無理だと思います。それでは自分はお手伝いできないので撤退します。お役に立てずすみませんが、他の方の回答をお待ちください。
退会済みユーザー

退会済みユーザー

2022/01/02 01:17

撤退するといておきながら何ですが、NuGet で System.Data.SqlClient をインストールすれば ASP.NET Core で SqlDependency は使えるようです。そして、SqlDependency によるクエリ通知と ASP.NET Core SiganlR と連携できます。詳しくは回答欄に追記しておきますので見てください。
guest

0

「DBの中身が変わったら」ならWebsocket の仕組みが必要と思います。

非同期通信とはDBを常に監視させるような処理を実装できるのでしょうか?

非同期通信とはあくまでクライアントサイドからサーバーサイドへのリクエストをいわゆるform送信のようにレスポンスを待機することなく送ることができる仕組みのことで、そことDBへの監視とやらは関係ありません。
JavaScriptからAjax、Fetch APIのような仕組みを用いてサーバーサイドへリクエストを送り、レスポンスを得られるので、その「リクエストを送る」部分をsetInterval()など用いて一定のスパンで実行する仕組みを作れば、「定期にサーバーサイドへリクエストを送る」ようになるので、そのときにサーバーサイド内でDBへの問い合わせを行えば「監視する」ような形はとれます。
ただそれは「DBの中身が変わったら」というサーバーサイド発信ではないので、双方向通信可能なWebsocket が必要です。

投稿2021/12/11 21:05

編集2021/12/11 21:13
m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ronaldo

2021/12/12 02:13

ご回答ありがとうございます。 やはり非同期通信について理解が足りなかったようです。 まずはWebsocket について調べてみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問