Ошибка «Операция недопустима из-за текущего состояния объекта» при обратной передаче

170

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

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

в System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded ()
в System.Web.HttpValueCollection.FillFromEncodedBytes (байты [], кодировка)
в System.Web.HttpRequest.FillInFormCol (

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

Музукумар
источник

Ответы:

281

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

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

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

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

Devjosh
источник
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

Мандип Джанджуа
источник