- PR -

ASP.NETで排他制御するには?

1
投稿者投稿内容
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2005-06-04 10:37
こんにちは。お世話になってます。

ASP.NETで開発を始めました。
ある伝票をあるユーザが開いているときは、他のユーザが開けないなどの排他制御
を行う場合、C/S型ならロック用テーブルを設けるなど、比較的簡単に行えました。

Web系システムでは、画面遷移の状態をシビアに制御しにくいため、あるユーザが
ある伝票をロックしても、正常に画面を遷移せず(閉じず)にしたため、ロック
を残したままの状態にある可能性も高いと思われます。

こういった場合、どのような設計を行うべきでしょうか?
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2005-06-04 20:43
不特定多数のユーザーが使用するWebアプリケーションにおいて
「ある伝票をあるユーザが開いているときは、他のユーザが開けないなどの排他制御」
をやること自体が、あまりよろしくないのではないでしょうか。
参照は排他なしに許可して、更新処理を楽観的ロックするのが一般だと思います。
どうしてもやるなら

1.帳票のテーブルに「開いた時間」と「開いたユーザー」を格納する列を追加する。(デフォルトはNULL)
2.帳票を開く時、「開いたユーザー」が自分以外で「開いた時間」の列が、NULLか一定時間たっていなければ開けない。
3.開ける場合は、「開いたユーザー」にユーザーと「開いた時間」に、現在日付を格納する。
4.ユーザーが明示的に帳票を閉じた場合は「開いた時間」と「開いたユーザー」をNULLにする

これならば、ユーザーが正規の手順で処理を行わなくても、一定時間たてばロックが無効になります。


maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2005-06-06 14:35
返答ありがとうございます。

考えていたことはその方法でいけそうです。
1

スキルアップ/キャリアアップ(JOB@IT)