2


2

*この問題はあなたの提案によって解決されました。*詳細は下を見てください。 ご協力ありがとうございます。

当社のASP.NET Webサイトは、いくつかの特定の安全性の高い国際的な場所からアクセスされます。 正常に動作していますが、非常に奇妙な動作を示している別のクライアントの場所を追加しました。

特に、ユーザーが検索条件を入力して検索ボタンをクリックすると、結果リストは空になります。 '0 results results’というテキストも表示されないため、Repeaterコントロールがまったくバインドされていないように見えます。 同様の動作は、サイトの他の部分では発生しますが、全部ではありません。 ユーザーはサイトに正常にログインでき、自分のプロフィール情報が表示されます。

私はそれらと全く同じ資格情報を使用してローカルにサイトにログインしました、そしてサイトはここからうまくいきます。 注意深く手順を踏んできたので、ユーザーの問題ではないと確信しています。

最初にロードされたときに検索結果ページのPage_Loadに検索結果をバインドします(条件はクエリ文字列内にあります)。 すなわち

if(!IsPostBack){BindResults(); }

BindResults()メソッド呼び出しをコメントアウトすることで、まったく同じ動作をローカルに再現できます。

IsPostBackの値の計算方法を知っている人はいますか? 他のページからのリダイレクトであっても、非常に安全なファイアウォール設定によってIsPostBackが常にtrueを返す可能性はありますか? 問題は他の場所にあるかもしれないのでそれは赤いニシンかもしれません。 それは正確に結果を複製します。

私はそのサイトにアクセスできないので、トラブルシューティングは彼らに指示を与えることと彼らに私に結果を伝えることを求めることに制限されている。

御時間ありがとうございます!

追加情報:クライアントは、デフォルトのルールを実行しているMicrosoft ISA 2006ファイアウォールの内側にあります。 このサイトは、Internet Explorerの信頼済みサイトのリストに追加され、FireFoxとGoogle Chromeで試したところ、すべて同じ結果になりました。

解決策:私にとって勝者はFiddlerを使用するという提案でした。 どんなWeb開発者もなしにすべきでないなんて素晴らしいツール。 これを使用して、問題を再現するまで、リクエストからさまざまなヘッダを削除することができました。 このような紛らわしい問題の場合によくあることですが、このバグの原因は2つあります。

1つ目の要素 - 可能な限り、Webアプリケーションはすべての主要ブラウザでサポートされているGZIP圧縮を使用します。 ファイアウォールは、GZIP解凍サポートを指定するヘッダーを取り除きました(Accept-Encoding:gzip、deflate)。

2つ目の要素 - 私のコードのバグは、コンテンツが圧縮されずに送信されているときに処理がバイパスされたことを意味していました。 この問題は、以前は気付かれていませんでしたが、アプリケーションは限られた対象者によって使用されており、そのすべてがGZIP解凍をサポートしていました。

7 Answer


3


彼らが技術に精通しているのであれば、私は彼らにFiddlerか何かをダウンロードしてもらい、HTTPセッション全体をキャプチャしてからあなたに保存されたセッションを送ってもらうでしょう。 たぶんそこに何かが出てくるでしょう。

一方、ISA Serverのインストール(必要な場合は評価版インストール、サブを持っているか知っている場合はMSDNからのインストール)を入手できるかどうか、およびローカルで複製できるかどうかを確認します。


1


クライアントがJavascriptを無効にしていて、_EVENTTARGETフォーム値を受け取らない可能性がありますか?


1


与えられたPOSTリクエストからGETリクエストを作成するのはある種のプロキシかもしれません…​

IsPostBackがどのように計算されるのかわかりませんが、HTTPリクエストをチェックして、それがPOSTなのかGETなのかを確認します。


1


オーイエー。 それは間違いなく "_EVENTTARGET" BTWではありません…​

http://ra-ajax.org[Ra-Ajax]はこれらのパラメータをサーバーに渡さず、それら(Ra-ajaxリクエスト)はIsPostBackリクエストとして処理されるので、私はこれを知っています...


1


あなたの検索ページが行うものと同じものを渡すテスト投稿ページを作成し、それらが渡されていることを確認するためにPage_Loadにすべての投稿、特に__VIEWSTATEを書き戻してください。

foreach(Request.Formの文字列キー){Response.Write( "" key "=" Request.Form [key]);} }

次に、テストページに表示されている内容を転送するように、ユーザーの1人に依頼します。

編集:いくつかのファイアウォールはVIEWSTATEを壊すことができるというドキュメンテーションとそれを回避するためのいくつかの方法があります: 状態の概要の表示


1


場所、場所、場所。 ユーザーのカルチャを確認してください。 通常それは問題を引き起こします。


1


IISログをチェックして、リクエストがサーバーに送信されているかどうかを確認します。 ISAセットアップは最初の要求をキャッシュに入れて、後続の要求でそれを処理している可能性があります。