次の機能を実現するために、.Net 4.0 の C# で Windows サービスを作成しています。
毎晩設定された時刻に、アプリは SQL Server に接続し、ユーザー テーブルを開き、レコードごとにユーザーの IP アドレスを取得し、WCF 呼び出しを行います。ユーザーの PC に送信して、トランザクションに使用できるかどうかを判断し、State テーブルにレコードを挿入します (y/n と、存在する場合はエラー)。
すべてのユーザーが処理されると、アプリは、IsPcAvailable = true である State テーブルの各レコードを読み取り、別のテーブルからそのユーザーのレポートのリストを取得し、レポートごとにエンタープライズ ドキュメント リポジトリからレポートをフェッチし、ユーザーの PC を呼び出します。 WCF はレポートをハードドライブにプッシュし、状態テーブルを成功に更新します。
上記のシナリオは、1 つのアプリ サーバーでシングル スレッドで実行されている場合、コーディングが簡単です。ただし、冗長性とパフォーマンスのために、少なくとも 2 つのアプリ サーバーがまったく同じことを同時に実行します。
レポートを取得して全国の PC にプッシュするのは時間のかかるプロセスであるため、各ユーザーが最初に User テーブル、次に State テーブル (同じ問題) で 1 回だけ処理されるようにするにはどうすればよいでしょうか。また、アプリをマルチスレッド化するのが最適です。たとえば、2 つのサーバーで 10 のスレッドを実行してすべてのユーザーを処理します。
私はデータベースの第一人者ではないので、C# ソリューションを好むでしょう :) 私の問題に最も近いのは次のとおりです
。 1 層下に移動して ADO.net を使用する必要がありますか?