Ошибка «Операция недействительна из-за текущего состояния объекта» во время обратной передачи - PullRequest
166 голосов
/ 12 января 2012

У меня была страница aspx, которая работала хорошо, но внезапно я получаю сообщение об ошибке «Операция недопустима из-за текущего состояния объекта».всякий раз, когда выполняется обратная передача.

Трассировка стека:

в System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded ()в System.Web.HttpValueCollection.FillFromEncodedBytes (Byte [] bytes, Encoding encoding)at System.Web.HttpRequest.FillInFormCollection ()

Может кто-нибудь помочь?

Ответы [ 4 ]

277 голосов
/ 12 января 2012

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

Попробуйте добавить следующий параметр в блок <appsettings> вашего web.config. в этом блоке вы максимизируете значения MaxHttpCollection, это заменит значения по умолчанию, установленные .net Framework. вы можете изменить значение в соответствии с вашими требованиями

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

Для получения дополнительной информации, пожалуйста, прочитайте этот пост. Подробнее о патче безопасности от Microsoft вы можете прочитать в этой статье базы знаний

39 голосов
/ 20 января 2012

Я не применил подкачку к своему сеточному обзору, и он распространяется на более чем 600 записей (с флажками, кнопками и т. Д.), А значение 2001 не сработало. Вы можете увеличить значение, скажем, 10000 и проверить.

<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="10000" />
</appSettings>
16 голосов
/ 21 января 2012

В 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.

5 голосов
/ 31 декабря 2014

Если ваша трассировка стека выглядит следующим образом, то вы отправляете огромную загрузку 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...