ASP.NET と SQL Server を使用して特定の何かを実現したいと考えています。たとえば、いくつかのページがあり、それぞれに独自の ID (つまり、id=1、id=5) があるとします。さらに、これらの ID のそれぞれについて、データベースに行があると仮定しましょう。
つまり、私が達成したいことは次のとおりです。Webソケット(永続的な接続)を利用しながら、データベースの変更を特定のページの特定のクライアントに間接的にプッシュします。
例えば:
行 1:
ID = 1
名前 = 私の名前1
行 2:
ID = 2
名前 = 私の名前 2
私がやりたいことは、特定の行または列の特定の値が変更されたときに、変更された特定の ID を持つページにアクセスしているクライアントのみに特定のデータを送信できるイベントをトリガーすることです。
たとえば、行 1 の列名が 'name1' から 'name2' に変更され、主キーの ID が 5 の場合、id=5 のページにアクセスしたすべての人にクライアント側でイベントを受信してもらいたいとします。
Webサービスに要求を論争的に送信し、その特定の行をIDでクエリして、更新されたか、特定の列の値が変更されたかを確認するクライアントコードを開発することを自分自身で防ぎたいと思います。
私が考えた1つの解決策は、キーがIDを表し、値が更新された日時になるように、キー/値をメモリ(つまりmemcache)に保持することです。次に、メモリをクエリできます。たとえば、[5, 05/11/2012 12:03:45] の場合、クライアント側で最後にメモリをクエリした時間を保存することで、データが最後に更新されたかどうかを知ることができます。日付を比較します。クライアントの日時値がメモリ内のキー/値の値よりも古い場合は、データベースに再度クエリを実行します。
しかし、それはまだ受動的なアプローチです。
それがどのように機能するかを描いてみましょう:
クライアントとサーバーには持続的な接続があります[ASP.NET 4.5 ソケット プロトコルを使用して実行できます]
サーバーは、異なるページからの接続、たとえば id=1、id=2 などの異なるクエリ文字列を持つ接続を区別することを認識しています。私が考えた 1 つのオプションは、それぞれの接続 ID を格納する配列をメモリに作成することです。接続文字列 ID 値。例: {1: 2346,6767,87878, 2:876,8765,3455}。1 と 2 はページの ID (つまり、id=1、id=2) で、他の値は ASP.net 4.5 を使用して取得した永続的な接続の接続 ID です。
主キー値 id=5 の行の列値の列「カウント」が値「1」から「2」に更新されました。
トリガーは関数を呼び出し、変更された行の ID (値 X と仮定しましょう) を渡します。特定の列の値(選択した列)も送信できることを好みます[これはCLRトリガーを使用して行われます]
関数には、値 X (数値) の ID を持つページにアクセスしているクライアントの接続のリストがあります。
サーバーはクライアントに列の値を送信します。送信できない場合は、true または false を送信して、その行が変更されたことをクライアントに通知します。
今まで解決した:
1] ASP.NET 4.5 ソケット プロトコルを使用して実行できます
4] CLRトリガーを使用すると、変更された特定の行の列データとIDを取得する関数を作成できます。
ASP.NET 4.5 を使用してアプリを開発しています。
ありがとう