11

スクリプト リソース ファイルと Web リソース ファイルによって、アプリケーションで断続的なエラーが発生します。問題の原因を追跡しようとしましたが、役に立ちませんでした。渡された「d」パラメーターが破損していることに気付きました。このパラメーターが破損した原因を突き止めることはできません。私のアプリケーションの JavaScript コードが、「d」パラメーター用に生成されたハッシュ コードと何らかの形で絡み合っていることに気付きました。

2009 年 1 月 26 日月曜日の午前 2 時 20 分に生成された例外
ページの場所: /ScriptResource.axd?d=y9_dUwBeGqLlRpT5Dml1zhoQvfa7NKdj69EYuV771kzSsa5KOOXBfJZjk%20%20%20%20%20%20%20%20%20%20%20%20if%20(cat_gallery%20!=
要求された URL : http://garmn.factoryoutletstore.com/ScriptResource.axd?d=y9_dUwBeGqLlRpT5Dml1zhoQvfa7NKdj69EYuV771kzSsa5KOOXBfJZjk if (cat_gallery !=
メッセージ: 呼び出しのターゲットによって例外がスローされました。
ソース: mscorlib
メソッド: System.Object _InvokeMethodFast(System.Object, System.Object[], System.SignatureStruct ByRef, System.Reflection.MethodAttributes, System.RuntimeTypeHandle)
スタック トレース: System.RuntimeMethodHandle._InvokeMethodFast(Object ターゲット、Object[] 引数、SignatureStruct& sig、MethodAttributes methodAttributes、RuntimeTypeHandle typeOwner) で System.RuntimeMethodHandle.InvokeMethodFast(Object ターゲット、Object[] 引数、シグネチャ sig、MethodAttributes methodAttributes、RuntimeTypeHandle typeOwner) ) System.Reflection.RuntimeMethodInfo.Invoke(オブジェクト obj、BindingFlags invokeAttr、バインダー バインダー、Object[] パラメーター、CultureInfo カルチャ、ブール値の skipVisibilityChecks) で System.Reflection.RuntimeMethodInfo.Invoke(オブジェクト obj、BindingFlags invokeAttr、バインダー バインダー、オブジェクト [ ] パラメーター、CultureInfo カルチャ) System.Web.Handlers.ScriptResourceHandler.DecryptString(String s) で System.Web.Handlers.ScriptResourceHandler で System.Reflection.MethodBase.Invoke(Object obj、Object[] パラメーター) で。System.Web.Handlers.ScriptResourceHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext コンテキスト) の System.Web.Handlers.ScriptResourceHandler.ProcessRequest(HttpContext コンテキスト) での DecryptParameter(NameValueCollection queryString)。 Web.HttpApplication.IExecutionStep.Execute() で System.Web.HttpApplication.ExecuteStep (IExecutionStep ステップ、ブール値 & completedSynchronously)完了同期)完了同期)
内部例外: System.Web.HttpException: ビューステートが無効です。System.Web.UI.Page.DecryptStringWithIV (文字列 s、IVType ivType) で System.Web.UI.Page.DecryptString (文字列 s) で
ユーザー IP: 74.34.62.187

BaseMessage : 2009 年 1 月 26 日月曜日の午前 2 時 20 分に例外が生成されました
ページの場所: /ScriptResource.axd?d=y9_dUwBeGqLlRpT5Dml1zhoQvfa7NKdj69EYuV771kzSsa5KOOXBfJZjk%20%20%20%20%20%20%20%20%20%20%20%20if%20(cat_gallery%20!=
要求された URL : http://garmn.factoryoutletstore.com/ScriptResource.axd?d=y9_dUwBeGqLlRpT5Dml1zhoQvfa7NKdj69EYuV771kzSsa5KOOXBfJZjk if (cat_gallery !=
メッセージ: ビューステートが無効です。
ソース: System.Web
メソッド: System.String DecryptStringWithIV(System.String, System.Web.Configuration.IVType)
スタック トレース: System.Web.UI.Page.DecryptStringWithIV(String s, IVType ivType) で System.Web.UI.Page.DecryptString(String s)
ユーザー IP: 74.34.62.187
ユーザー エージェント: Mozilla/4.0 (互換性あり; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; .NET CLR 1.1.4322; Zune 3.0)
4

7 に答える 7

5

収集してきたデータを分析して、いくつかの結論を導き出しました。私が得たエラーの大部分は、IE 8 または Firefox 3 を実行している Windows Vista コンピューターから発生していることに気付きました。Vista と IE 7 の場合もいくつかありました。ますます多くの人々が新しいオペレーティング システムを使用するにつれて、問題になりつつあります。

Mozilla/4.0 (互換性; MSIE 8.0; Windows NT 5.1; Trident/4.0; FunWebProducts; .NET CLR 1.1.4322; .NET CLR 2.0.50727) Mozilla/4.0 (互換性; MSIE 8.0; Windows NT 5.1; Trident/4.0; GoogleT5; MSN 最適化;CA; MSN 最適化;CA) Mozilla/4.0 (互換; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; GTB5; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506; メディアセンター PC 5.0)

とにかく、私が得たい結論は、この情報に基づいて、ブラウザーが Java スクリプトをどのように処理するかを調べ始めたということです。この問題を引き起こしている可能性のある新しい何かがあった場合、それは私に興味深い何かが飛び出すときです。 w3School の Web サイトに、html と xhtml の違いに関する記事があります。

HTML と XHTML の違い HTML 4 と XHTML では、スクリプト内のコンテンツが異なります。

HTML 4 では、コンテンツ タイプは CDATA として宣言されます。これは、エンティティが解析されないことを意味します。XHTML では、コンテンツ タイプは (#PCDATA) として宣言されます。これは、エンティティが解析されることを意味します。これは、XHTML では、すべての特殊文字をエンコードするか、すべてのコンテンツを CDATA セクション内にラップする必要があることを意味します。

スクリプトが XHTML ドキュメントで正しく解析されるようにするには、次の構文を使用します。

そのため、すぐにコードを調べたところ、問題の原因となっているページの一部で DOCTYPE ディレクティブが欠落していることがわかりました。また、.NET Register Client Script ルーチンを使用して JavaScript を出力していた場合、スクリプト タグの内部コンテンツが CDATA 属性でラップされていましたが、通常の JavaScript がページに記述されていた場合は、CDATA が使用されていませんでした。例えば

関数 RunMe() { }

私は、ブラウザーが html の戻り値をレンダリングまたは解析する方法について専門家ではありませんが、スクリプト リソース リクエストの Url パラメーターがクラッシュするたびに、その下にあるスクリプト タグの間に常にコードが含まれているため、上記の状況と何らかの関係があると強く信じています。 . 場合によっては、そこにある html スタイル シート コードさえあることもあります。例えば

http://braun.factoryoutletstore.com/ScriptResource.axd?d=70kBR-jPBTx9R89FxObjhipHPS9CMlta5W6ZZiqkaa5zNOXUU4DtsY8V_8function runSearchForField(eventObj, id){ if ((eventObj.which == 13) || (eventObj.keyCode == 13)) { var cat_gallery = getParam('ギャラリー'); var cat = getParam('cat') var searchTerm = escape(document.getElementById(id).value); // '&' および '=' シンボルの問題を回避するために、escape() 関数を使用して検索用語を URL コード化する必要があります var url; もし (猫_

http://braun.factoryoutletstore.com/ScriptResource.axd?d=9vS7Hk65j_0hD8to_aPDj

今考えているのは、ページで DOCTYPE を指定していないため、ブラウザーが受信したデータに基づいて推測しようとしている可能性があるため、CDATA が存在する場合と CDATA がない場合があるため、めちゃくちゃになってしまうということです。ページに存在します。彼らは仮定が危険だと言っているので、これが確固たる仮定の原因であるかどうかはわかりません。誰かが私の理論に光を当てて、ブラウザが古いバージョンとは異なる方法で xhtml を解析しているかどうか、または同様の状況があったかどうかを教えてください。

于 2009-02-03T15:44:16.320 に答える
4

私たちは同じことを経験しました、そしてそれはIE8のレンダリングエンジンのバグに関連しているようです。

次のリソースをご覧ください。http: //blogs.msdn.com/ieinternals/archive/2009/07/27/Bugs-in-the-IE8-Lookahead-Downloader.aspx http://connect.microsoft.com /IE/feedback/ViewFeedback.aspx?FeedbackID=467062

基本的に、ページ内のHTMLの4Kが省略される「パーサーの再起動」を引き起こしている、ページ上のいくつかのタグがあります。これは、ブラウザがページの4096バイト後に発生するScriptResource.axdにHTMLを配置していることを意味します。

于 2009-10-23T16:04:59.253 に答える
1

これらのエラーは、さまざまな理由でさまざまなブラウザで発生すると思います。そのため、追跡が非常に困難になっています。

IE8のバグ

Microsoftによると、IE8のバグは(状況によっては)サーバーに対して偽の要求を生成し、ユーザーには影響を与えませんが、サーバー側でエラーがログに記録される原因になるとのことです。

ここでこの議論を参照してください:バグIE8 –4Kが削除されました-ScriptResource.axdをロードするときに「無効なビューステート」

...特にEricLaw-彼が言うときのMSFTのアップデート:

ここでIE6/IE7またはFirefoxで問題が発生している場合は、以下で説明するIE8の問題とは関係のない別の問題が発生していることに注意してください。

IE8の先読みダウンローダーのバグも参照してください

彼らは、Content-Typeの設定方法を変更すると、すべてではありませんが、一部のエラーに役立つと言います。これは、まだ見ているさまざまなあいまいな状況が原因であると彼らは言います。

更新: 2010年4月1日の時点で、これらのIE8のバグは、IE8累積更新(KB980182)を介して修正されています。
この投稿:IE8 Lookahead Downloader Fixedは、世界中のすべての人が修正プログラムをダウンロードするのを待つ以外に、バグやその他の考えられる回避策について詳しく説明しています。

その他のブラウザ

まだ理解していませんが、おそらくさまざまな理由で、他のブラウザもこれらのエラーを生成しています。

Webファーム

この問題は、Webファームで実行されているサイトに限定されませんが、ファームを実行している場合は、この回答をjesalで確認してください。

于 2009-11-04T14:01:14.913 に答える
1

よし、MS ajaxという生き地獄へようこそ。

このビットは面白いです

要求された URL : http://garmn.factoryoutletstore.com/ScriptResource.axd?d=y9_dUwBeGqLlRpT5Dml1zhoQvfa7NKdj69EYuV771kzSsa5KOOXBfJZjk if (cat_gallery != メッセージ: 無効なビューステート

その "if (cat_gallery !=" はちょっと場違いに見えます。私はその if の周りの JavaScript を見て、怪しいものがあるかどうかを確認します

更新パネルを使用していると仮定すると、無効なビューステートに関するそのビットは、ビューステートが部分的な要求の間で中断されていると考えるように導きます。私の推測では (事実に基づくのではなく、経験と痛みに基づいています)、それは 2 つのいずれかであると考えられます。複数のパネルがあり、状態が不安定になっている (パネル 1 が状態を更新し、パネル 2 が直後に起動し、変更を取得しない)、またはページのライフサイクルに関連している (複数のデータバインドが部分的なページで無効なビューステートを引き起こすのを見たことがあります)ポストバック)

まず、エラーを再現してみてください。問題が発生しているページに移動し、考えられるすべての動作の組み合わせを試してください。再現可能なバグが見つかったら、デバッガーをアタッチしてブレークポイントを全体に配置し、ページのライフサイクルをステップ実行して、予期しない方向にさまよっているコード パスがないかどうかを確認します。

いずれにせよ、MS AJAX は非常にブラックボックス的であるため、関連する問題のデバッグは非常に困難な場合があります (先週お勧めしたことを実行するのに約 20 時間かかりました)。正しい道を下る。

于 2009-01-26T16:51:09.347 に答える
1

これらのエラーは、負荷分散クラスターまたは Web ファームでサイトをホストしている場合に発生する傾向があります。その環境にアプリケーションをデプロイする場合は、各サーバーの構成ファイルが、ハッシュと復号化にそれぞれ使用される validationKey と decryptionKey に対して同じ値を共有していることを確認する必要があります。これが必要なのは、どのサーバーが連続する要求を処理するかを保証できないためです。

手動で生成されたキー値を使用すると、設定は次の例のようになります。要素が web.config ファイルのセクションの下にあることを確認してください。

<machineKey validationKey="0BE61B38B9836B541C45728ADB9D93A6FD819169DBB6AD20078A70F474650CC0295C69131E083A6B3762C457BBAF3E66E18F294FDA434B9DD6758631A90A2E20" decryptionKey="B80CC12266B36CCF35EF0708DB5854EDA3BBEBA1A7C89A4E" validation="SHA1"/>

これは、キー値を生成するために使用できる気の利いた小さなキージェネレーターです - http://www.eggheadcafe.com/articles/GenerateMachineKey/GenerateMachineKey.aspx

ご想像のとおり、ScriptResource.axd の d パラメーターは実際には復号化キーであり、そのキーが前の要求と一致しない場合、.NET フレームワークは無効なビュー ステート エラーをスローします。

それが役立つことを願っています!

于 2009-01-26T19:30:48.667 に答える
0

これはばかげた答えかもしれませんが、セッション状態マネージャーを確認しましたか? デフォルトは IN PROC で、Web ファームでは機能しません。SQL またはその他のステート マネージャーを使用する必要があります。

于 2009-01-28T02:49:21.480 に答える
0

やあマット 助けてくれてどうもありがとう。私の分析では、このリクエストは常に同じ JavaScript コードと絡み合っているようです。問題の原因となったリクエストされた URL を示すエラー ログの行を含めました。

/ScriptResource.axd?d=70kBR-jPBTx9R89FxObjhipHPS9CMlta5StoreUrl'%20is%20already%20set.%20*/function%20runSearchForField(eventObj,%20id){%20%20%20%20if%20((eventObj.which%20= =%2013)%20||%20(eventObj.keyCode%20==%2013))%20%20%20%20%20{%20%20%20%20%20%20%20%20var% 20cat_gallery%20=%20%20getParam('ギャラリー');%20%20%20%20%20%20%20%20var%20cat%20=%20getParam('猫')%20%20%20%20 %20%20%20%20var%20searchTerm%20=%20escape(document.getElementById(id).value);%20//%20must%20use%20escape()%20function%20to%20urlencode%20search%20term%20to %20avoid%20issues%20with%20'&'%20and%20'='%20symbols%20%20%20%20%20%20%20%20var%20url;%20%20%20%20%20% 20%20%20%20%20%20%20if%20(猫ギャラリー%20!=

ご覧のとおり、「d」パラメーターが破損しています。ここで何が起こるかというと、System.Web.UI.Page.DecryptString がこの文字列を復号化しようとすると、無効なビュー ステート エラーがスローされます。私が知りたいのは、この文字列がどのようにしてこのように破損するかです。私は JavaScript を調べましたが、すべて問題ないように見えます。唯一の奇妙な点は、コードにコメントがいくつかあることです。これは、その行が単なるコメントであることを示す /* のコメントです。ネストされたパネルは使用していませんが、ページに更新パネルが 1 つあります。

于 2009-01-26T18:57:38.547 に答える