Подтвердить что ты не робот

Недопустимое состояние просмотра для ScriptResource.axd?

Файлы ресурсов Script Resource и Web Resource генерируют прерывистые ошибки в моем приложении. Я пытался преследовать причину проблемы, но безрезультатно. Я замечаю, что передаваемый параметр "d" некорректен, и я не могу понять, что я могу выяснить, что вызывает повреждение этого параметра. Я заметил, что код JavaScript, который в моем приложении - это то, как переплетается с хэш-кодом, сгенерированным для параметра "d".

Exception genereated on Monday, January 26, 2009, at 2:20 AM
Page location: /ScriptResource.axd?d=y9_dUwBeGqLlRpT5Dml1zhoQvfa7NKdj69EYuV771kzSsa5KOOXBfJZjk%20%20%20%20%20%20%20%20%20%20%20%20if%20(cat_gallery%20!=
Requested Url : http://garmn.factoryoutletstore.com/ScriptResource.axd?d=y9_dUwBeGqLlRpT5Dml1zhoQvfa7NKdj69EYuV771kzSsa5KOOXBfJZjk if (cat_gallery !=
Message: Exception has been thrown by the target of an invocation.
Source: mscorlib
Method: System.Object _InvokeMethodFast(System.Object, System.Object[], System.SignatureStruct ByRef, System.Reflection.MethodAttributes, System.RuntimeTypeHandle)
Stack Trace: at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) at System.Web.Handlers.ScriptResourceHandler.DecryptString(String s) at System.Web.Handlers.ScriptResourceHandler.DecryptParameter(NameValueCollection queryString) at System.Web.Handlers.ScriptResourceHandler.ProcessRequest(HttpContext context) at System.Web.Handlers.ScriptResourceHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext context) at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Inner Exception: System.Web.HttpException: Invalid viewstate. at System.Web.UI.Page.DecryptStringWithIV(String s, IVType ivType) at System.Web.UI.Page.DecryptString(String s)
User IP: 74.34.62.187

BaseMessage : Exception genereated on Monday, January 26, 2009, at 2:20 AM
Page location: /ScriptResource.axd?d=y9_dUwBeGqLlRpT5Dml1zhoQvfa7NKdj69EYuV771kzSsa5KOOXBfJZjk%20%20%20%20%20%20%20%20%20%20%20%20if%20(cat_gallery%20!=
Requested Url : http://garmn.factoryoutletstore.com/ScriptResource.axd?d=y9_dUwBeGqLlRpT5Dml1zhoQvfa7NKdj69EYuV771kzSsa5KOOXBfJZjk if (cat_gallery !=
Message: Invalid viewstate.
Source: System.Web
Method: System.String DecryptStringWithIV(System.String, System.Web.Configuration.IVType)
Stack Trace: at System.Web.UI.Page.DecryptStringWithIV(String s, IVType ivType) at System.Web.UI.Page.DecryptString(String s)
User IP: 74.34.62.187
User Agent: Mozilla/4.0 (compatible; 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)
4b9b3361

Ответ 1

Я анализировал данные, которые я собирал, и сделал несколько выводов. Я заметил, что большая часть ошибок, которые я получаю, поступает с компьютеров Windows Vista, работающих под управлением IE 8 или Firefox 3. Там также есть несколько случаев, когда это была 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 Optimized, CA, MSN Optimized, 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; Media Center PC 5.0)

Но в любом случае вывод, который я хочу получить, заключается в том, что на основе этой информации я начал изучать, как браузеры обрабатывают java-скрипты, и если есть что-то новое, что может вызвать эту проблему, то, когда что-то интересное выскакивает у меня, Я нашел на веб-сайте w3School статью о различии в html vs. xhtml.

Различия между HTML и XHTML HTML 4 и XHTML отличаются от содержимого внутри скриптов:

В HTML 4 тип содержимого объявляется как CDATA, что означает, что сущности не будут разбираться. В XHTML тип содержимого объявляется как (#PCDATA), что означает, что сущности будут анализироваться. Это означает, что в XHTML все специальные символы должны быть закодированы или весь контент должен быть обернут внутри секции CDATA.

Чтобы убедиться, что a script правильно разбирается в документе XHTML, используйте следующий синтаксис:

Итак, я сразу же просмотрел свой код, и я увидел, что директива DOCTYPE отсутствовала на некоторых моих страницах так же, как и проблема. Я также заметил, что когда я выводил JavaScript с помощью .NET Register Client script, он бы обернул внутреннее содержимое тегов script атрибутом CDATA, а там, где был обычный JavaScript, написанный на странице, не было Используется CDATA. Например

Функция RunMe() {  }  

Я не знаю, как браузеры отображают или анализируют возврат html, но я твердо верю, что это имеет какое-то отношение к ситуации выше, потому что параметр Url в запросе ресурса script при каждом сбое всегда содержит код между script теги под ним. Иногда есть даже код таблицы стилей 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 ('gallery'); var cat = getParam ('cat') var searchTerm = escape (document.getElementById(id).value);//должен использовать функцию escape() для поиска в urlencode, чтобы избежать проблем с '&' и '=' символы var url; if (cat _

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

Теперь то, что я думаю о том, что некоторые из них, потому что я не указываю ни один DOCTYPE на странице, которую браузер может пытаться сделать, основываясь на данных, которые он получает, тогда он заканчивается, потому что иногда есть CDATA, и бывают случаи, когда нет CDATA, присутствующего на странице. Я не знаю, действительно ли это твердое предположение, поскольку они считают допущения опасными. Если кто-то может осветить мою теорию и сообщить, будут ли браузеры анализировать xhtml по-разному, что более старая версия или даже если у них были подобные ситуации.

Ответ 2

Мы испытали то же самое, и, похоже, это связано с ошибкой в ​​движке рендеринга 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

В основном есть несколько тегов на странице, которые вызывают "перезапуск парсера", что приводит к опущению 4K HTML на странице. Это означает, что браузер помещает HTML в ScriptResource.axd, который на 4096 байт появляется на странице.

Ответ 3

Хорошо, добро пожаловать в живой ад, который является MS ajax.

этот бит интересен

Запрошенный URL: http://garmn.factoryoutletstore.com/ScriptResource.axd?d=y9_dUwBeGqLlRpT5Dml1zhoQvfa7NKdj69EYuV771kzSsa5KOOXBfJZjkif (cat_gallery!= Сообщение: недействительно ViewState

что "if (cat_gallery! =" выглядит неуместно. Я бы посмотрел на javascript вокруг этого, если и посмотреть, есть ли что-нибудь, что выглядит подозрительно

Предполагая, что вы используете панели обновлений, этот бит о некорректном представлении viewstate приводит меня к мысли, что viewstate получает borked между частичными запросами. Моя догадка (не основанная на факте, больше на опыте и боли) заключается в том, что это одна из двух вещей; либо у вас есть несколько панелей, и состояние выходит из состояния удара (состояние панели обновления 1, панель 2 срабатывает сразу после и не принимает изменения), или что это связано с жизненным циклом страницы (я видел, что несколько databinds вызывают недопустимое состояние просмотра на частичной странице постбэки)

Я бы сказал, прежде всего, попытаться воспроизвести ошибку. Перейдите на страницу, на которой это происходит, и попробуйте каждую комбинацию поведения, о котором вы можете думать. После того, как у вас есть воспроизводимая ошибка, присоедините отладчик и поместите контрольные точки по всему, затем просто перейдите на жизненный цикл страницы и посмотрите, есть ли какие-либо кодовые пути, блуждающие по направлениям, которые вы не ожидали.

В любом случае, MS AJAX чрезвычайно черная, поэтому проблемы с отладкой вокруг него могут быть чрезвычайно сложными (потратили около 20 часов на то, что я только что рекомендовал вам на прошлой неделе). Желаю вам удачи и надеюсь, что это поможет вам на правильном пути.

Ответ 4

Эти ошибки, как правило, происходят, если вы размещаете свой сайт в кластере балансировки нагрузки или в веб-ферме. Если вы развертываете приложение в этой среде, вы должны убедиться, что файлы конфигурации на каждом сервере имеют одинаковое значение для validationKey и decryptionKey, которые используются для хэширования и дешифрования соответственно. Это необходимо, потому что вы не можете гарантировать, какой сервер будет обрабатывать последовательные запросы.

С введенными вручную значениями ключа, настройки должны быть похожи на следующий пример. Убедитесь, что элемент находится под секцией файла web.config.

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

Вот отличный генератор ключей, который вы можете использовать для генерации значений ключа - http://www.eggheadcafe.com/articles/GenerateMachineKey/GenerateMachineKey.aspx

Итак, как вы могли догадаться, параметр d в ScriptResource.axd на самом деле является ключом дешифрования, и когда этот ключ не совпадает с предыдущим запросом,.NET framework выведет недопустимую ошибку состояния представления.

Надеюсь, что это поможет!

Ответ 5

Я думаю, что эти ошибки происходят с разными браузерами по разным причинам, что и делает так трудно отследить.

Ошибка IE8

Microsoft заявила, что ошибка в IE8 (в некоторых случаях) генерирует ложные запросы на сервер, которые не влияют на пользователя, но приводят к ошибкам, регистрируемым на стороне сервера.

Смотрите эту дискуссию здесь: Ошибка IE8 - 4K сброшено - "Недопустимое состояние просмотра" при загрузке ScriptResource.axd

... особенно обновление EricLaw-MSFT, когда он говорит:

Следует отметить, что любой, кто сталкивается с проблемой здесь в IE6/IE7 или Firefox, сталкивается с другой проблемой, которая не связана с проблемой IE8, описанной ниже.

См. также Ошибки в IE8 Lookahead Downloader

Говорят, что изменение способа установки Content-Type поможет с некоторыми из ошибок, хотя не все из них - они говорят, что это вызвано различными неясными обстоятельствами, которые они все еще ищут.

Обновление: По состоянию на 01 апреля 2009 года эти ошибки IE8 были исправлены с помощью накопительного обновления IE8 (KB980182).
Это сообщение: IE8 Lookahead Downloader Исправлено дает больше подробностей об ошибках и других возможных обходных решениях, кроме того, что они ждут, когда все в мире загрузят исправление.

Другие браузеры

Пока не выяснили, но другие браузеры также генерируют эти ошибки, предположительно по разным причинам.

Веб-фермы

Эта проблема не ограничивается сайтами, запущенными на веб-фермах, но если вы работаете в ферме, проверьте этот ответ jesal, который может помочь

Ответ 6

Привет, Мэтт. Большое спасибо за помощь. Хорошо, это то, что у меня есть Извещение в моем анализе, этот запрос, кажется, всегда переплетается с тем же кодом 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('gallery');%20%20%20%20%20%20%20%20var%20cat%20=%20getParam('cat')%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(cat_gallery%20!=

поскольку вы можете увидеть, что параметр "d" поврежден. Что здесь происходит, так это то, что System.Web.UI.Page.DecryptString будет вызывать ошибку состояния недопустимого представления, когда пытается дешифровать эту строку. Я хотел бы знать, как эта строка может стать поврежденной. Я взглянул на JavaScript, и все кажется мне хорошо, только странно, что есть некоторые комментарии в коде, который является комментарием с /*, чтобы обозначить, что строка - это просто комментарии. Я не использую вложенные панели, но у меня есть одна панель обновления на странице.

Ответ 7

Это может быть глупый ответ, но вы проверили свой менеджер состояния сеанса? по умолчанию используется IN PROC, который не работает с веб-фермой, вам нужно использовать SQL или какой-либо другой менеджер состояний.