0

私のプロジェクトの全体的な目標は、複数の 911 ディスパッチ センターから現在の緊急インシデント情報を収集し、その情報を Web サービス経由でサーバーに送信することです。これにより、地域の緊急インシデントのリストが表示されます。現在、各配送センターでデータを収集している方法は次のとおりです。

  • ディスパッチ センターでは、すべてのインシデント情報を格納する何らかのデータベース サーバーが実行されています。
  • 現在のすべての緊急インシデントを xml 形式で返すクエリをデータベースに設定しています。
  • 3秒ごとにそのクエリ(実際にはストアドプロシージャ)を実行し、そのデータ(xml)をWebサービスに送信するWindowsサービスがあります
  • サーバーは情報を受信すると、現在のすべてのインシデント情報を (発送センターではなく、データベースから) 削除し、「新しい」データに置き換えます。

このアプローチの問題点は、大量の冗長データが送信されることです。私がやりたいことは、sproc が最後に実行されてから変更されたデータベース行のみを送信することです。私の考えは、Windowsサービスにこのようなことをさせることです..sprocを実行し、結果を何らかの配列/辞書に保存します。次に sproc が実行されるとき (3 秒後) は、新しい結果を既存の配列と比較し、違いだけを取り出して送信することです...データを XML ではなく JSON として Web サービスに送信したいと考えています。 . これを達成するためにどのようなアイデアが必要なのか疑問に思っています (必ずしも特定のコードではなく、概要のようなものです...) C# の使用...

編集

さらに調査した結果、「Dataset to List」タイプのプロセスに沿ったものが必要だと思います...これにより、各レコードをカスタムオブジェクトに変換し、それらのオブジェクトのリストを作成できます.. . オブジェクトのリストをメモリに格納し、次のデータ セット (3 秒後) を使用して元のリストと比較し、何かが変更されたかどうかを確認できます... Windows サービスは、必ずしも SQL Server sproc を呼び出すとは限りません。そのため、このコードは他のデータベース サーバーで動作するように作成する必要があります...各データセットで返されるレコードの数は、おそらくせいぜい 10 ~ 15 にすぎないことに注意してください...数千について話しているわけではありませんレコードの...

4

2 に答える 2

0

関連するテーブルにCDCを設定し、前回のポーリング以降に発生した変更を探すことができます。もちろん、それはあなたとストアド プロシージャの間にレイヤーを導入することになりますが、そのとおりです。

于 2013-10-20T15:17:12.913 に答える