Error 'La operación no es válida debido al estado actual del objeto' durante la devolución


170

Tenía una página aspx que funcionaba bien, pero de repente recibo 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.FillInFormCorm

Alguien puede ayudar?


Respuestas:


281

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

Intente agregar la siguiente configuración en el <appsettings>bloque de 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 en consecuencia según sus necesidades de formulario

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

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 la base de conocimiento



40

No apliqué paginación en mi vista de cuadrícula y se extiende a más de 600 registros (con casillas 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>

16

Para ASP.NET 1.1, esto todavía se debe a que alguien publica más de 1000 campos de formulario, pero la configuración debe cambiarse en el registro en lugar de un archivo de configuración. Debe agregarse 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.


6

Si el seguimiento de su pila parece ser el 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 la resolución, actualice su configuración web con la siguiente clave. Si no puede obtener el seguimiento de la pila, utilice Fiddler . Si todavía no ayuda, intente aumentar el número a 10000 o algo así.

<configuration>
<appSettings>
<add key="aspnet:MaxJsonDeserializerMembers" value="1000" />
</appSettings>
</configuration>

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.