- PR -

同一ページに同時に submit するとフォーム内容が転写される

投稿者投稿内容
LOBO
会議室デビュー日: 2004/07/22
投稿数: 11
お住まい・勤務地: 愛知
投稿日時: 2005-10-04 17:35
テキストエリアとボタン(submit)があり、ボタンをクリックするとテキスト
ボックスに入力した内容がDBに保存されるページを作りました。

このページに2つの端末でアクセスし、ほぼ同時にサブミットを行った場合に、
レスポンスが帰ってくるとテキストエリアの内容が他方の端末のテキストエリア
の内容に置き換わってしまいます(入れ替わることはなくどちらかが他方の内容
に置き換わります)。
また、他方の内容に置き換わった側は、保存もされません(まるで、一方の処理
が先に完了すると、後の方は処理をやめて、先に終わった方の結果を両方の端末
に返しているように見えます)。

お互いにボタンをクリックし続けるような無茶なことをしているわけではなく、
せいので1回クリックしてそのような状態になってしまいます。

また、サーバマシンを変えても同様の事象が発生します。

原因を突き止めるに当たって、どのあたりを調査すればよいか教えていただけな
いでしょうか。
また、何か関連する事項をご存じの方がいらっしゃいましたら、教えてください。


環境は Windows2000Server + IIS5.0 + ASP.NET です。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-10-04 17:43
引用:

このページに2つの端末でアクセスし、ほぼ同時にサブミットを行った場合に、
レスポンスが帰ってくるとテキストエリアの内容が他方の端末のテキストエリア
の内容に置き換わってしまいます


Applicationオブジェクトを使っている。
staticな変数がある。
とかしていませんか?

_________________
たつごろー
codeseek
こみゅぷらす
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2005-10-04 18:37
あとはVB.NETでModule使ってる、かな?
LOBO
会議室デビュー日: 2004/07/22
投稿数: 11
お住まい・勤務地: 愛知
投稿日時: 2005-10-04 19:20
ご指摘ありがとうございます。
Applicationオブジェクトもstaticな変数も使用していません。
また、言語はC#で作成しました。

Trace.axd でアプリケーショントレースが見られることがわかり、早速試してみました。

結果、内容が置き換えられてしまった端末側で、

1)要求の詳細−セッション ID が空欄
2)トレース情報がごっそりと存在しない
3)コントロールのツリーはヘッダ部分のみでアイテムがなし

という状態でした。

トレース内容をコンペアした結果、異なるのは以下の部分のみでした。

1)上記の部分
2)クッキーコレクション以下に現れるセッションID
3)フォームコレクションのテキストエリアの内容
4)Content-Length
5)REMOTE_ADDR、REMOTE_HOST、REMOTE_PORT

このような情報で何かご推測いただけましたら、教えてください。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-10-04 19:31
サーバー側でDB更新後などにテキストボックスの値を再設定していませんか?
再設定する時に、その値はどこから持ってきていますか。
LOBO
会議室デビュー日: 2004/07/22
投稿数: 11
お住まい・勤務地: 愛知
投稿日時: 2005-10-04 19:48
テキストボックスに値を設定する処理は、IsPostBack == falseの場合に
すでに登録された内容が存在するか検索をして、存在する場合に設定する
部分のみです。
それ以外の処理(ボタンクリック)では取得のみで設定は行いません。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-10-04 19:50
proxyサーバが悪さをしているとか。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-10-04 20:02
引用:

LOBOさんの書き込み (2005-10-04 19:48) より:
それ以外の処理(ボタンクリック)では取得のみで設定は行いません。



ママママジでぇ!?
う〜ん・・・じゃあ共通の部分が悪さしているとかですかね。

プログラムが問題なのかそうでないのかを切り分けましょうか。
新しくWebプロジェクトを作って、テキストボックス1つとボタン1つを置いただけのページを作ります。
ページでは初回表示時のみランダムな値(やその瞬間の時分秒など要求ごとに異なるような値)をテキストボックスに設定するようにします。
2つの端末で画面を開いて、ボタン同時押し。

内容転写されますか?されませんか?
されるならプログラムの問題ではないということですね。
されないならLOBOさんが今作っているプログラムの問題ということです。共通部分とか怪しいですね。

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