Недопустимое состояние просмотра для 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)

person JamTech    schedule 26.01.2009    source источник
comment
похоже, ты сломал ТАК (все равно в хроме)   -  person Matt Briggs    schedule 26.01.2009
comment
Дж. Оливер дает здесь правильный ответ.   -  person EricLaw    schedule 28.12.2009


Ответы (7)


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

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

person Jonathan Oliver    schedule 23.10.2009

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

это немного интересно

Запрашиваемый Адрес: http://garmn.factoryoutletstore.com/ScriptResource.axd?d=y9_dUwBeGqLlRpT5Dml1zhoQvfa7NKdj69EYuV771kzSsa5KOOXBfJZjk if (cat_gallery! = Сообщение: недопустимое состояние просмотра

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

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

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

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

person Matt Briggs    schedule 26.01.2009
comment
Я симпатизирую. Меня это достало, что мы, скорее всего, перейдем на платформу MVC и сделаем все AJAX самостоятельно с помощью jQuery. Когда я трачу 5 часов на решение проблемы состояния просмотра, чтобы сделать что-то, что должно занять в общей сложности 20 минут, это меня очень злит ... - person gregmac; 29.01.2009

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

Ошибка IE8

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

См. Это обсуждение здесь: Ошибка IE8 - 4K сброшено - «Недопустимое состояние просмотра», когда загрузка ScriptResource.axd

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

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

См. Также Ошибки в Загрузчик Lookahead для IE8

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

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

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

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

Веб-фермы

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

person codeulike    schedule 04.11.2009

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

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

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

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

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

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

person jesal    schedule 26.01.2009
comment
Я научил, что параметр d - это зашифрованное имя и версия сборки, которые запрашиваются классом обработчика для scriptResource. - person JamTech; 27.01.2009
comment
Ты прав. Я ошибочно предположил, что параметр d был ключом дешифрования. Изучая его подробнее, я наткнулся на этот блог - tinyurl.com/5dhqzb, который указывает на совершенно иную причину: почему могут происходить эти ошибки. Хотя мне удалось их исправить, добавив файл machineKeys. - person jesal; 29.01.2009
comment
Привет, рад, что ты починил свою. Вы используете ферму серверов? Проблема не в том, что я не думаю, что машинный ключ поможет. Я заметил, что проблема, похоже, связана с центрами машин, работающих под управлением Vista с IE8, FF3, MAC OS X. Я начинаю задаваться вопросом, являются ли теги скрипта и xhtml в этом новом браузере проблемой - person JamTech; 30.01.2009
comment
Мой сайт работал на кластере балансировки нагрузки Win Server 03. После того, как я добавил machineKeys, ошибки прекратились. Хотя я не видел никакого кода JavaScript, смешанного с параметром d, как в вашем случае. Это действительно странно. Вы используете обработчик CombinedScripts в ScriptManager? - person jesal; 01.02.2009

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

person Decker97    schedule 28.01.2009
comment
Я исключил веб-фермы, так как я их не использую, при первоначальной настройке система была спроектирована для работы на веб-ферме, но она так и не была завершена. не думаю, что это государственная проблема. Спасибо за ваше предложение. - person JamTech; 28.01.2009

Привет, Мэтт, большое спасибо за вашу помощь. Хорошо, это то, что я заметил в моем анализе, этот запрос, кажется, всегда переплетается с одним и тем же кодом 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, и мне все кажется нормальным, единственная странность заключается в том, что в коде есть некоторые комментарии, которые являются комментарием с / *, чтобы обозначить, что строка является просто комментариями. Я не использую вложенные панели, но у меня есть одна панель обновлений на странице.

person JamTech    schedule 26.01.2009

person    schedule
comment
Итак, чтобы было ясно, решило ли это добавление doctype? Если да, то какой тип документа вы использовали? - person Brian MacKay; 01.09.2009
comment
Или вы просто все в CDATA завернули? А также, если вы используете теги сценария и используете src вместо того, чтобы размещать javascript на странице, возникают ли у вас эти проблемы? - person Brian MacKay; 01.09.2009