1

Actaully 私は、PDA アプリ部分を持つ Asp.net Web サイトを開発しました。会社の従業員が朝来て、PDA でデータを取得し、一日中作業し、夕方に再びオフィスに来るか、Web アクセスからサーバー上のデータを更新する場合があります。Web サービスはリモート メソッドであり、Web アクセスのみでアクセスできるため、Web サービスを介してこれを行いました。

問題は同時実行性です。Web サービスを介して同期しているときに同時実行性を制御する方法ですが、一度にデータを更新しようとする多くの従業員がいる可能性があります。

Web サービスでは、PDA アプリケーションから DataTable を受け取り、Sql Server を使用して LINQ を介して更新または挿入操作を行います。

4

3 に答える 3

0

あなたができることは、「コミット」リクエストで構成される FIFO のようなチャネルを作成することです。この場合、一度に 1 つのクライアントからの変更のみを実行できます (他のすべてのクライアントは待機する必要があります)。同時に、更新された行を追跡する必要があります (新しい行はおそらくそうではありません) 競合する変更がある場合 (ユーザーが別のユーザーによって既に変更されている行を変更しようとしている場合)、クライアントはそれらについて知っている必要があります(または、それらの変更を自動マージすることを試みることができます)。

于 2011-01-04T08:01:18.763 に答える
0

同じデータに対して 2 つの更新が発生したときにスローされるLinq ChangeConflictExceptionクラスを見てください。これを使用して、競合解決コードを入れることができます。たとえば、2 人の営業担当者が同じクライアントに製品を販売する場合、識別子を変更してから再度コミットを試みることができます。または、変更を上書きしても問題ない場合もあります。その場合は、単に新しい値を取得してからコミットできます。

別の方法として、相互に排他的で実行時の一貫性を保証するストアド プロシージャを作成することもできます。そうすれば、linq を使用する必要はありません。変更を解析してから、DB に対して適切な SPROC を実行して、注文を挿入したり、顧客の詳細を更新したりできます。

アプリケーションでの並行処理は、うまく機能させるために設計時に行う必要があります。

于 2011-01-04T08:03:45.583 に答える
0

クライアントが持ち帰るデータの使用例は何ですか? データを更新するだけですか、それとも新しいデータも挿入しますか?

データを更新するだけの場合、特定の行の最後の値が正しいかどうか (たとえば、最新のタイムスタンプで値をコミットするかどうか)、または他のデータに値があるかどうかを判断する必要があります。

データの挿入を扱うときは、データベースが増分主キーを使用していると仮定します。この場合、PDA アプリケーションから受け取った DataTable を単にコミットすることはできません。新しい増分 ID を生成するために、どれが新しい行であるかを識別し、それらの新しい行を増分 ID なしでサーバー テーブルに挿入する必要があります。次に、生成された新しい ID で PDA の DataTable を更新する必要があります。

更新が処理される実際の順序 (複数のクライアントが同時に同期する) に対処するには、同期プロセスでデータセットをキューに配置して、サーバーの更新が順次管理されるようにすることをお勧めします。これにより、プロセスが少し簡単になります。

于 2011-01-04T08:03:54.500 に答える