0

質問の言い回しが正確にわからないので、間違ったことをした場合はしばらくお待ちください。

言語の背後にあるコードとしてVBを使用してASP.NETアプリケーションを作成しています。DBに接続してクエリを実行するデータアクセスクラス(もちろんパラメーター化)と、検証タスクを実行する別のクラスがあります。このクラスには、aspxページからアクセスします。

私が望んでいるのは、データサーバー側を保存し、ユーザーがデータの有効性に基づいていくつかのオプションから選択するのを待つことができるようにすることです。しかし、私の理解が完全にずれていない限り、サーバー上に永続的なデータオブジェクトがあると、複数のユーザーが接続するときに問題が発生しますか?

私の最終的な目標は、データが検証されると、エンドユーザーがそれを変更できないようにすることです。現在、データを検証していますが、ユーザーが「OK」と言った後でも、Webフォームからデータを取得する必要があります。これにより、誤って(可能性が低い)または故意に(使用する可能性が低い)、不正なデータを挿入する可能性が明らかに残ります。しかし、私はチャンスを逃したくない)。

それで、私は完全に私の理解から外れていますか?もしそうなら、誰かが私にサーバー上に永続的なデータを保持するためのいくつかの指示を提供するリソースを指し示すことができますか、または指示を提供できますか?

ありがとう!


具体的な例:

私たちは最近、検査官ガジェットを雇って、高速道路の標識を巡回検査し、バブルガムチューインガム(通常は青年市議会の立派なメンバー)によって壊れたり盗まれたりしていないことを確認する標識検査官のデータを挿入しました。

ガジェットが彼の気概を証明することができれば、彼は実際のサイン検査を行うように昇進するかもしれません。今のところ、彼の唯一の仕事は、このイントラネットサイトにアクセスして、最新の検査に関する情報を入力することです。地区、郡、ルート番号、道路のセクション、および標識が設置され検査された日付。

もちろん、80年代後半に生きていた私たちの誰もが、ガジェットの不備に精通しています。したがって、このサイトは、私たちが作成できる限りのガジェットの証拠です。地区/郡/ルートはすべてドロップダウンリストから入力されます。彼はセクションの開始と終了、および日付を手動で入力するだけです。時々、彼はマウスをいじって、セクションの始まりと終わりを入れ替えてしまいます。そのため、テキストが赤に変わり、間違いを警告します。残念ながら、彼は今日、すべての赤い色を黒に変えるアンチレッドサングラスを着用することを選択しました。データを送信しようとすると、どこで何を修正する必要があるかを示すエラーメッセージが表示されます。残念ながら、彼はキーボードを太く指で触れ、1.337を入力する代わりに、13.37(マイル)を入力しました。道路の長さはわずか10マイルです。上手、これで、メッセージ(モーダルdiv)がポップアップし、道路の実際の走行距離は0〜10であり、彼のエントリは道路の3つのセクションを結合することを通知します。次に、3つのボタンから選択できます。キャンセルすると、データを変更できます。制約は、13.37を10に変換します。オーバーライドすると、データを入力できます。

「ヨウザ!」ガジェットは叫び、[キャンセル]をクリックして戻って間違いを修正しました。次のデータセットは正しく入力されたので、確認メッセージがポップアップ表示され、これから行う変更を示し、続行してもよいかどうかを尋ねました。残念ながら、ガジェット検査官はコーヒーカップをノックオーバーし、机全体に残骸を散乱させました。急いでクリーンアップしたので、[OK]をクリックしましたが、Go-Go-Gadget電磁石が誤ってコンピューターの数ビットを反転させ、郡をARKANSASからAKRSANASに変更する前ではありませんでした。

データがキャンパス全体のサーバーに保存されていて、渡された情報が「OK」または「キャンセル」のみだった場合、これは回避されたはずです。


もちろん、「OK」の後でいつでも再度検証できますが、それはハッキーな回避策のようです。

とにかく、これが明らかになることを願っています!

4

2 に答える 2

1

並行性について言及していると思います。それがあなたが求めているものであるならば、それを理解することを始めるためにリンクをチェックしてください。バックエンドと特定の状況に応じて、おそらくもう少し調査を行う必要があります。繰り返しますが、これがあなたが探しているものである場合、あなたは悲観的な並行性に特に興味があるかもしれません。

http://en.wikipedia.org/wiki/Concurrency_control


編集:あなたの例を読んだ後....それはあなたが次のことをしたいかもしれないように聞こえます、頑張ってください。

  1. データを入力するユーザーがアクセスするときに、ある種の悲観的な同時実行パターンを使用してレコードを「ロック」します(データベース上でデータが実際に存在するため)。これは、dbレコードを読み取り専用にするようなものです。

  2. ユーザーが[OK]をクリックしたら、おそらくasp.netコードを使用して検証する必要があります。検証に合格した場合は、dbを更新し、dbレコードのロックを解除します。

  3. ユーザーがキャンセルを押した場合は、dbレコードを更新せず、ロックを解除するだけです。

  4. ユーザーが入力を強制したい場合は、dbを更新し、dbレコードのロックを解除します。

于 2010-05-28T15:08:06.810 に答える
0

Webサーバーのキャッシュの使用を検討していると思います。ASP.NETでは、Context.Cacheを使用してサーバーにデータを格納できます。1人のユーザーがキャッシュすると、サーバー上の他のユーザーもそれにアクセスできます。

データはサーバーにキャッシュされるため、DBで更新クエリを呼び出すたびにキャッシュをクリアする必要があります。その後、次にデータをロードするときに、データをキャッシュに再度保存できます。

selectメソッドで、Cache[key]がnullでないかどうかを確認します。そうである場合は、データを返す前に、DBからデータをロードし、それをCache[key]に保存します。nullでない場合は、DBではなくキャッシュからロードするだけです。

使用するキーにはパラメータを含めることができるため、キャッシュからデータをフィルタリングする必要はありません。または、キーを汎用として使用すると、すべてのデータが保存されます。次に、データに対してLINQクエリを実行して、パラメーターをフィルター処理できます。

これがお役に立てば幸いです。

于 2010-05-28T15:03:20.530 に答える