Ошибка "Операция недействительна из-за текущего состояния объекта" во время обратной передачи
У меня была страница aspx, которая работала хорошо, но внезапно я получаю сообщение об ошибке "Операция недействительна из-за текущего состояния объекта". всякий раз, когда выполняется обратная передача.
Трассировка стека:
в System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded()
в System.Web.HttpValueCollection.FillFromEncodedBytes(байт [] байт, кодировка)
в System.Web.HttpRequest.FillInFormCollection()
Может кто-нибудь помочь?
4 ответа
Кто-то разместил довольно много полей формы на вашей странице. Новое максимальное значение по умолчанию, введенное последним обновлением безопасности, составляет 1000.
Попробуйте добавить следующий параметр в ваш файл web.config <appsettings>
блок. в этом блоке вы максимизируете значения MaxHttpCollection, это переопределит значения по умолчанию, установленные.net Framework. вы можете изменить значение в соответствии с вашими требованиями
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="2001" />
</appSettings>
Для получения дополнительной информации, пожалуйста, прочитайте этот пост. Подробнее о патче безопасности от Microsoft вы можете прочитать в этой статье базы знаний.
Я не применил пейджинг к моему сетевому виду, и он распространяется на более чем 600 записей (с флажками, кнопками и т. Д.), А значение 2001 года не сработало. Вы можете увеличить значение, скажем, 10000 и проверить.
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="10000" />
</appSettings>
В 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.
Если ваша трассировка стека выглядит следующим образом, то вы отправляете огромную нагрузку 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