asp.net - El error "La operación no es válida debido al estado actual del objeto" durante la devolución de datos
(4)
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 pila es:
en System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded ()
en System.Web.HttpValueCollection.FillFromEncodedBytes (Byte [] bytes, Codificación de codificación)
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 <appsettings>
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
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="2001" />
</appSettings>
Para obtener más información, lea this 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 casilla de verificación, botones, etc.) y el valor de 2001 no funcionó. Puede aumentar el valor, digamos 10000 y probar.
<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="10000" />
</appSettings>
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 pila 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 pila, utilice el fiddler . Si todavía no funciona, intente aumentar el número a 10000 o algo
<configuration>
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="1000" />
</appSettings>
</configuration>
Para más detalles, lea this artículo de Microsoft kb