"Операція недійсна через поточний стан об'єкта" помилка під час відтворення


170

У мене була сторінка aspx, яка працювала добре, але раптом я отримую помилку "Операція недійсна через поточний стан об'єкта". всякий раз, коли виконується поштовий зворотній зв'язок.

Слід стека:

на System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded ()
на System.Web.HttpValueCollection.FillFromEncodedBytes (байт [] байт, кодування кодування)
на System.Web.HttpRem.Cilllection.Fill

Може хтось допоможе?


Відповіді:


281

Хтось розмістив на вашій сторінці досить багато форм форм. Новий макс. За замовчуванням, введений останнім оновленням безпеки, - 1000.

Спробуйте додати наступне налаштування у <appsettings>блоці вашого web.config . у цьому блоці ви максимізуєте значення MaxHttpCollection, це скасуватиме параметри за замовчуванням, встановлені .net Framework. ви можете відповідно змінити значення відповідно до потреб вашої форми

<appSettings>
    <add key="aspnet:MaxHttpCollectionKeys" value="2001" />
 </appSettings>

Для отримання додаткової інформації прочитайте цей пост. Для отримання більш детальної інформації про виправлення безпеки Microsoft, ви можете прочитати цю статтю бази знань



40

Я не застосував пейджинги на моєму перегляді сітки, і він поширюється на понад 600 записів (з прапорцями, кнопками тощо), і значення 2001 року не працювало. Ви можете збільшити значення, скажімо, 10000 і протестувати.

<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="10000" />
</appSettings>

16

Для ASP.NET 1.1 це все ще пов’язано з тим, що хтось розміщує більше 1000 полів форми, але налаштування потрібно змінити в реєстрі, а не у конфігураційному файлі. Його слід додати як DWORD з ім'ям MaxHttpCollectionKeys в реєстрі під

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0

для 32-бітних версій Windows та

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\1.1.4322.0

для 64-розрядних версій Windows.


6

Якщо ваш слід стека виглядає наступним чином, ви надсилаєте величезне навантаження об’єктів json на сервер

Operation is not valid due to the current state of the object. 
    at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)
    at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
    at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
    at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
    at System.Web.Script.Serialization.JavaScriptSerializer.DeserializeObject(String input)
    at Failing.Page_Load(Object sender, EventArgs e) 
    at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
    at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
    at System.Web.UI.Control.OnLoad(EventArgs e)
    at System.Web.UI.Control.LoadRecursive()
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Для вирішення оновіть веб-конфігурацію за допомогою наступного ключа. Якщо ви не можете отримати слід стека, будь ласка, використовуйте fiddler . Якщо це все-таки не допомагає, спробуйте збільшити число до 10000 чи щось

<configuration>
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="1000" />
</appSettings>
</configuration>

Для отримання більш детальної інформації, будь ласка, прочитайте цю статтю Microsoft kb

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.