- - PR -
複数ページ間でのトランザクション
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-02-23 09:43
VB.NETにて
あるページ(A)にて、SQLserverに接続し、SqlTransactionにてトランザクションを かけたまま複数のページを行き来したのち、 あるページ(B)にて、コミット(またはロールバック)したいと思っております。 SqlTransactionをグローバルに参照、設定できるようにすればと思い 下記をトライしましたがだめでした。 ・Session変数への格納、Application変数への格納、クッキーへの格納 (失敗または不可能でした) ・モジュール内に宣言しグローバルにもつ (リダイレクト時に不具合、リンクでは可能でしたが好ましくない) 何かよい方法はあるでしょうか? よろしくお願いいたします。 | ||||||||
|
投稿日時: 2005-02-23 09:57
どういうコードを書いたのですか? 失敗とはどうなったのですか? ASP.NETですね。 だとしたら、ページをまたがるトランザクションの設計は、基本的に、私ならしません。 _________________ たつごろー codeseek こみゅぷらす | ||||||||
|
投稿日時: 2005-02-23 10:04
ASP.NETにおいてそのような設計は出来ません。
更新するタイミングでコネクションを張って、同時実効性を他の手段で確保してください。 | ||||||||
|
投稿日時: 2005-02-23 10:36
普通はやりません。もしページ遷移の途中でコミットもロールバックもする事無くWEBブラウザを閉じてしまったら何が起こるか考えてみてください。タイムアウトが発生するまでそのセッションは占有されたままになるんですよ。セッションプールが使い果たされサービスが停止したり、レコードにロックが掛かったままになる為、他の業務に支障が出るのが落ちです。 _________________ 甕星 <mikahosi@abox9.so-net.ne.jp> http://blogs.msmvp.jp/mikahosi/ | ||||||||
|
投稿日時: 2005-02-23 12:47
返信、ありがとうございます。
失敗、不可能の理由は以下の通り ・Session変数への格納⇒シリアル化できない ・Application変数への格納⇒期待以上に残る ・クッキーへの格納⇒文字列しか入らない (コードは特に特別な記述でないの省略します) なるべく簡単かつ単純にすませようと思いトライしましたが×。 ページをまたいだトランザクションを実施したいのは、 一度キープしたデータを、ある程度保持しておいて、のちにコミットしたいからです。 ただし、キープ中、他人はそこをキープできなくする。 わかりやすくいいかえると、ショッピングカートのように、 あるものを一度キープしたら、コミットはしてなくても在庫は1つ減っている。 購入するまでは、他のページへの行き来は自由 購入ページにてコミット、というようなことです。 トランザクションタイムアウトを短めの時間で設定しておき、さらにsessionendでロールバックするようにと思っていました。 やはり無理があるのでしょうか。何かよい代価案、名案があればと思ってます。 | ||||||||
|
投稿日時: 2005-02-23 12:52
ショッピングカートのテーブルを用意すればいいかも。 _________________ たつごろー codeseek こみゅぷらす | ||||||||
|
投稿日時: 2005-02-23 13:04
セッション情報をテーブルに持つというような感じですよね。 _________________ ASP/ASP.NETだいすき。 ASP++ by Moo http://moo-asp.net/ 日記は ほぼ毎日更新中 http://d.hatena.ne.jp/aspx/ | ||||||||
|
投稿日時: 2005-02-23 13:29
このような目的に対して、トランザクションを用いるのは不適切と思います。 誰かにキープされている商品は、その人が購入(Commit)またはキャンセル(Rollback) するまで、たとえ在庫が豊富にあったとしても他の人はその商品をキープできなくなってしまいます。 また、「在庫が1つ減っている」ことは、当然ですが他の人からは不可視です。 <追記> すいません、前半部分をよく読んでいませんでした。 「キープしている間は他人はキープできない」でいいのですね。 いずれにしても、トランザクションで実装するよりも、「キープする」「購入する」の 各行為を、それぞれ独立に定義すべきと思います。 [ メッセージ編集済み 編集者: kanai 編集日時 2005-02-23 13:34 ] |