ASP.NETとSQL Serverを使用して具体的なものを実現したい。たとえば、私は各ページにそれぞれの識別情報(すなわち、id = 1、id = 5)があるとしましょう。さらに、これらのIDのそれぞれについて、データベースに行があるとします。SQL Serverの列または行の更新に基づいて特定のページのクライアントにデータを送信
要するに、私が達成したいのは、データベースの変更を特定のページの特定のクライアントに直接プッシュすることですWebソケット(永続的接続)。例えば
:
行1:
ID = 1
名= myname1
行2:
ID = 2
名前= myname2
私がしたいことは、特定の行または列内の特定の値が変更されたときに、そのページを訪れているクライアントにのみ特定のデータを送信できるイベントがトリガーされることです変更された特定のIDで
たとえば、行1の列名が 'name1'から 'name2'に変更され、主キーのIDが5の場合、id = 5のページにアクセスするすべてのユーザーにクライアント側。
webサービスにリクエストを送信し、特定の行をidで照会して、更新か特定の列の値が変更されたかどうかを調べるクライアントコードを開発しないようにします。
私が考えていたのは、キー/値がメモリ内に保持されている(つまりmemcache)キーがIDを表していて、値が更新されたdatetimeを表しているということでした。次に、私はメモリを照会することができます。たとえば、[5、05/11/2012 12:03:45]の場合、クライアント側でメモリに最後にクエリを保存してデータが最後に更新されたかどうかを知ることができます。日付を比較する。クライアントのdatetime値がメモリ内のkey/valueの値よりも古い場合は、データベースを再度照会します。
しかし、まだパッシブなアプローチです。
、それがどのように動作するかを、私はそれを描画してみましょう:
クライアントとサーバが永続的な接続を持って
Serverが区別するために知っている[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を使用して取得した固定接続の接続IDです。4.5
行の列の値主キー値id = 5の列 'count'は値 '1'から '2'に更新されます。
トリガは関数を呼び出し、変更された行のid(値Xと仮定)を渡します。私は、関数がでページを訪問しているクライアントに対して、接続のリストを持っている
[これはCLRトリガーを使用して行われている] も(私の選択のいくつかの列)を特定のカラムの値を送信することができることを好みますサーバーがクライアントに列値を送信するか、可能でない場合はtrueまたはfalseを送信して、その行への変更が行われたことをクライアントに通知します。
は今まで解決:
1] ASP.NET 4.5を使用して行うことができますソケットプロトコル
4]私は、列のデータを持つようになる機能を持たせることができるトリガCLRを使用します変更された特定の行のID。
私はASP.NET 4.5を使用してアプリケーションを開発しています。
ありがとうございます。
.NET 4.5にはWebソケットプロトコルのヘルパーがいくつか用意されています... http://www.asp.net/vnext/overview/whitepapers/whats-new#_Toc318097383 – McGarnagle
WebSocketは私を助けませんデータが変更されたかどうかを知る必要があるからです。WebSocketはデータをクライアントに転送するのに役立ちますが、特定のページ(つまり、id = 5)にあるデータにデータを転送するのに役立つソリューションを見つける必要があります。さらに、変更された行主キーIDを引数としてトリガされた関数に送るある種のトリガメカニズムが必要です。 –
CLRトリガー? http://msdn.microsoft.com/en-us/library/ms131093(v=sql.105).aspx – McGarnagle