0

データベースとの対話にWebサービスを使用する.NETクライアントアプリケーション(C#、WinForms)を構築しています。クライアントは、WANまたはVPNを使用してリモートの場所から実行されるため、データベースに直接アクセスするのではなく、Webサービスを使用することをお勧めします。

私が今取り組んでいる問題は、データベースの同時実行性をどのように処理するかです。つまり、異なる場所にいる2人が同じデータを更新する場合、どのように処理すればよいですか?各データベースレコードでタイムスタンプを使用し、それをupdate where句の一部として使用することを検討していますが、これは、タイムスタンプがWebサービスインターフェイスを介して前後に移動する必要があることを意味します。

これに取り組むための最良の方法は何ですか?

4

3 に答える 3

1

Web サービスがデータベースと直接通信することを望んでいないと思います。おそらく、データ アクセス レイヤーとやり取りするある種のビジネス コンポーネントとやり取りするサービスが必要になるでしょう。Web サービスがタイムスタンプを確認する必要がないように、同時実行例外はすべて DAL からビジネス レイヤーに渡され、そこで処理されます。

ただし、データ テーブルのようなものをクライアントに渡し、タイムスタンプを避けたい場合は、フィールドごとに比較することで同時実行性チェックを行うことができます。テーブル アダプタ ウィザードは、オプティミスティック コンカレンシー チェックを要求した場合、デフォルトでこのタイプのコンカレンシー チェックを生成します。

于 2008-10-10T21:25:27.623 に答える
0

競合が発生する頻度が低く、手動で解決できる場合、簡単な解決策は、行の更新前の値を監査テーブルにコピーする更新トリガーを追加することです。このように、最新の書き込みが「勝者」ですが、上書きによってデータが失われることはなく、管理者は以前の行の状態を復元したり、それらを組み合わせたりすることさえできます。

この手法には欠点があり、頻繁な上書きが一般的である場合にはあまり良い解決策ではありません。

于 2008-10-10T22:39:47.570 に答える
0

また、これは少し話題から外れていますが、クライアントがネットワークにリモート接続するという理由だけで、Web サービスを使用することが必ずしも正しい方法であるとは限りません。ASP.NET Web サービスは XML ベースであり、非常に冗長です。クライアント アプリケーションが常に接続されていると期待できる場合は、Web サービスを使用しない方がよいでしょう。

于 2008-10-10T22:43:55.733 に答える