Невалидно състояние на изгледи за ScriptResource.axd?

Ресурсът на скрипта и файловете на уеб ресурса генерират периодични грешки в приложението ми. Опитвах се да намеря причината за проблема, но безуспешно. Забелязвам, че параметърът „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
изглежда, че сте счупили SO (все пак в chrome)   -  person Matt Briggs    schedule 26.01.2009
comment
J. Oliver дава верния отговор тук.   -  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

По принцип има няколко маркера на страницата, които причиняват „рестартиране на анализатора“, което води до пропускането на 4K от HTML в страницата. Това означава, че браузърът поставя HTML към ScriptResource.axd, който се появява 4096 байта по-късно в страницата.

person Jonathan Oliver    schedule 23.10.2009

Добре, добре дошли в живия ад, който е MS ajax.

това малко е интересно

Искан Url: 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 часа в работа около проблем с viewstate, за да направя нещо, което трябва да отнеме общо 20 минути, това много ме ядосва. - person gregmac; 29.01.2009

Мисля, че тези грешки се случват с различни браузъри по различни причини, което прави проследяването им толкова трудно.

Грешка в IE8

Microsoft каза, че грешка в IE8 (при някои обстоятелства) ще генерира фалшиви заявки към сървъра, които не засягат потребителя, но водят до регистриране на грешки от страната на сървъра.

Вижте тази дискусия тук: Грешка IE8 – 4K отпадна – „Невалидно състояние на изгледи“, когато зареждане на ScriptResource.axd

... особено актуализацията на EricLaw-MSFT, когато той казва:

Струва си да се спомене, че всеки, който изпитва проблем тук в IE6/IE7 или Firefox, се сблъсква с различен проблем, който не е свързан с проблема с IE8, описан по-долу.

Вижте също Грешки в Програмата за изтегляне Lookahead на IE8

Те казват, че промяната на начина, по който задавате Content-Type, ще помогне с някои от грешките, макар и не всички - те казват, че се причинява от различни неясни обстоятелства, които те все още разглеждат.

Актуализация: От 01.04.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