- PR -

[ASP.NET]Postした結果が正しく返ってこない

1
投稿者投稿内容
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-03-22 16:58
みなさんこんにちは
今回は皆様にお知恵をお借りしたく書き込みをさせていただきました。

現在以下の環境でWebアプリを構築していますがある拠点でPostした
結果がPostbackやエラーではなく初期化されたものが返ってきます。
(Page_loadでIsPostbackがfalseの状態)

個人的にはなんらかの原因でセッションが切れてしまったのではないかと
思うのですが、もし違う原因や調査方法がありましたらご教示お願いいたします。

コード:
(サーバ側)
開発環境  :ASP.NET (VS2002 C# Framework1.0)
実行環境  :Windows2000Server(IIS5.0)
DB    :SQL Server 2000(Webサーバとは別サーバ)
ネットワーク:専用線1.5M
同時接続数 :最大で20(平均10)

(拠点側)
実行環境  :WindowsXP SP1(IE6.0)
ネットワーク:ADSL8M(ルータで複数台使用)
*エラー時、ADSLモデムがリンクランプは点灯(リンク)
*エラー時、他のPCでネットワークを使用していない

べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2004-03-23 02:17
「ある拠点」といっているのは「期待通りの動作をするクライアントもある」
ということですか?「セッションが切れてしまった」と判断した理由はなんですか?
どんな実装をしているのかもう少し詳しく書くとわかりやすいと思いますが。

もしかしてですが、サーバー名にアンダースコア(_)は入っていませんか?
これが入っているとIEは(特定のパッチをあてると)クッキーをブロックします。
すなわちセッション管理ができません。以下のの真ん中あたりに記載されています。
http://support.microsoft.com/default.aspx?scid=kb;ja;325192

#全然ちがったらごめんなさい
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-03-23 11:33
べる様ご返答ありがとうございます。

>「ある拠点」といっているのは「期待通りの動作をするクライアントもある」
>ということですか?「セッションが切れてしまった」と判断した理由はなんですか?
>どんな実装をしているのかもう少し詳しく書くとわかりやすいと思いますが。

すみませんくわしい説明を追加いたします。

今回現象のおきたクライアントですが通常は問題なく動くのですが稀に今回のような現象が
発生します。
・同じ拠点には別のクライアントはありません。
・別の拠点では今回のような現象は発生していません。

通常はサーバ側で問題があると「サーバがみつかりません」もしくはページは中途半端に
表示されると認識しています。また今回の現象はPostの結果があたかも別のセッション
で処理が開始されたかのように初期画面が表示されたのでPost時にセッションが切れて
おかしくなったかと推測いたしました。

実装部分ですが、おおざっぱに書くと以下のようになります。

1)「保存」ボタン押下
2)カスタム入力検証でマスターDBに入力したコードが登録されているかチェック
3)「保存」ボタン押下イベントで確認メッセージを表示するメソッドを呼び出し
4)Visibleがfalseに設定しある確認メッセージ部分にメッセージを設定してVisible
  をtrueに設定

4)の処理ですが最初はConfimで処理していたのですがConfimが入力コントロールの上に
表示されるため入力した値が見えないとの顧客の注文から画面に確認メッセージを
埋め込み対応しています。

またPage_Loadの処理は以下のようになっています。
コード:
private void Page_Load(object sender, System.EventArgs e)
{
	// 確認メッセージの設定
	ButtonExit.Attributes["onclick"] = 
		"return confirm('発注入力を終了して前画面に戻ります。よろしいですか?')";
	
	// データが存在するかチェック
	CheckOrderData();
	
	if( IsPostBack == false )
	{
		// コントロールの初期化
		// ドロップダウンにDBのデータを設定
		InitCtrl();

		// 引数としてユニークIDが設定されているかチェック
		String uniqueID = Request.QueryString["UniqueID"];
		// 引数としてユニークIDが設定されている場合
		if( uniqueID != null && uniqueID != "" ) 
		{
			// 設定されたユニークIDでデータを読み込む
			LoadData( uniqueID );
		}
		// 引数としてユニークIDが設定されていない場合
		else 
		{
			// 新規入力初期表示
			InitDisp( true );
		}
		// 引数として戻り先URLが設定されているかチェック
		String reqURL = Request.QueryString["ReqURL"];
		// 引数として戻り先URLが設定されていた場合
		// 隠しラベルに戻り先URLを設定
		if( uniqueID != null && uniqueID != "" ) 
		{
			LabelReqURL.Text = ".." + reqURL;
		}
		// ボタンの初期化
		// ボタンの表示・非表示を設定
		InitButton();
	}

	// TextBoxの初期化(JAVAスクリプトの設定)
	InitEdit();
}




サーバ名の件ですがアンダースコア(_)は入っておりません。
ただこの情報は知らなかったので今後は気をつけたいと思います。
貴重な情報ありがとうございます。


KEN@
会議室デビュー日: 2004/02/07
投稿数: 12
投稿日時: 2004-03-23 12:29
こんにちは。
直接の解にはならないと思いますが、セッションが切れているかどうかはSession.IsNewSession(またはSessionID)を見れば分かります。
Global.asaxのBeginRequestイベントではSessionオブジェクトが利用できない(と私のメモにあるが、怪しいかも..)ので、エラーとなる該当のページのOnLoadなどにテキストファイルやDBにSessionIDをアクセスログとして記録して、該当のエラーが出る前と、出た後のIDが異なっていればセッションが切れている、と判定できると思います。
# ある拠点だけ、というお話なのでネットワークが瞬断してクライアントIPが
# 変わっていたり、とかはないですよね?
# クライアントIPもログとして取っておくと良いかもしれません。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-03-23 16:36
KEN@様ご返答ありがとうございます。

アドバイスの通りログを取ってしばらく様子をみることにします。

今回の現象も含めて「ページがみつかりません」や「途中半端にページが表示される」
など原因と対策をじっくり調査してみるつもりです。

また皆様にお知恵を借りることになるかもしれませんがよろしくお願いいたします。
未記入
会議室デビュー日: 2004/03/23
投稿数: 2
投稿日時: 2004-03-23 21:44
みなさま、こんにちわ

現在以下の環境でWebアプリを構築しています。

377KBのエクセルからHTMLに変換してOWCのスプレートシート(OWC11)を画面に貼り付ける
という処理を行っているのですが

そこで、困った事に
ボタンイベントを発生させると
Page_loadでIsPostbackがfalseの状態になってしまいます。

エクセルのサイズが小さいとこの現象は起きません。

IISのprocessModel設定(Machine.configファイル内)など
変えてみたのですが、上手くいくません。

なにか情報をおもちの方、いらっしゃいましたら
御教示よろしくおねがいしたします。

サーバー
開発環境 :  ASP.NET(VB.NET2003)
OS: WINDOWS SERVER2003
DB: SQL SERVER2000

クライアント
OS:      WINDOWS XP
OFFICE:   2003
IE:       6.0.2800.1106.xpsp2.030422-1633
1

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