El error “La operación no es válida debido al estado actual del objeto” durante la devolución de datos

Tenía una página aspx que funcionaba bien, pero de repente recibí el error “La operación no es válida debido al estado actual del objeto”. cada vez que se realiza una devolución de datos.

El seguimiento de la stack es:

en System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded ()
en System.Web.HttpValueCollection.FillFromEncodedBytes (Byte [] bytes, Codificación de encoding)
en System.Web.HttpRequest.FillInFormCollection ()

¿Alguien puede ayudar?

Alguien publicó bastantes campos de formulario en su página. El nuevo máximo predeterminado introducido por la actualización de seguridad reciente es 1000.

Intente agregar la siguiente configuración en el bloque su web.config. en este bloque está maximizando los valores de MaxHttpCollection, esto anulará los valores predeterminados establecidos por .NET Framework. puede cambiar el valor de acuerdo a las necesidades de su formulario

    

Para obtener más información, lea esta publicación. Para obtener más información sobre el parche de seguridad de microsoft, puede leer este artículo de Knowledge base

No apliqué la búsqueda en mi vista de cuadrícula y se extiende a más de 600 registros (con checkbox, botones, etc.) y el valor de 2001 no funcionó. Puede boost el valor, digamos 10000 y probar.

    

Para ASP.NET 1.1, esto todavía se debe a que alguien ha publicado más de 1000 campos de formulario, pero la configuración se debe cambiar en el registro en lugar de en un archivo de configuración. Se debe agregar como un DWORD llamado MaxHttpCollectionKeys en el registro bajo

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0 

para ediciones de 32 bits de Windows, y

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

para ediciones de 64 bits de Windows.

Si su seguimiento de stack se parece a lo siguiente, está enviando una gran carga de objetos json al servidor

 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) 

Para su resolución, actualice su configuración web con la siguiente clave. Si no puede obtener el seguimiento de la stack, utilice el violín . Si todavía no funciona, intente boost el número a 10000 o algo

      

Para más detalles, lea este artículo de Microsoft kb