2012-01-12 14 views
164

Tenía una página aspx que funcionaba bien, pero de repente me aparece 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.'La operación no es válida debido al estado actual del objeto' error durante la devolución

El seguimiento de pila es:

en System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded()
en System.Web.HttpValueCollection.FillFromEncodedBytes (byte [] bytes, Codificación codificación)
en Sistema. Web.HttpRequest.FillInFormCollection()

¿Alguien puede ayudar?

+0

posible duplicado de [ASP.NET MS11-100: ¿Cómo puedo ¿cambia el límite en la cantidad máxima de valores de formulario publicados?] (http://stackoverflow.com/questions/8684049/asp-net-ms11-100-how-can-i-change-the-limit-on-the- maximum-number-of-posting-for) – FatalError

Respuesta

276

Alguien ha publicado 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> de su web.config. en este bloque está maximizando los valores de MaxHttpCollection, esto anulará los valores predeterminados establecidos por .NET Framework. se puede cambiar el valor en forma apropiada según su forma necesita

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

Para obtener más información, puede leer this puesto. Para obtener más información sobre el parche de seguridad de Microsoft, puede leer this Knowledge base article

+3

http://technet.microsoft.com/en-us/security/advisory/2659883 – Adam

+1

http: //www.acumen-corp.com/Blog/tabid/298/EntryId/8/ASP-NET-Error-ThrowIfMaxHttpCollectionKeysExceeded.aspx – Soenhay

37

No apliqué la búsqueda en mi gridview y se extiende a más de 600 registros (con casilla de verificación, botones, etc.) y el valor de 2001 no lo hizo t trabajo. Puede aumentar el valor, digamos 10000 y probar.

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

para ASP.NET 1.1, esto es aún debido a que alguien la publicación de más de 1000 campos de formulario, pero el ajuste se debe cambiar en el registro en lugar de un archivo de configuración. Hay que añadir como un valor 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 las ediciones de 64 bits de Windows.

4

Si el seguimiento de la pila siguiente se parece a continuación, usted está enviando una enorme 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, por favor, actualice su configuración web con clave siguiente. Si no puede obtener el seguimiento de la pila, utilice fiddler. Si todavía no ayuda, por favor, intente aumentar el número de 10.000 o algo

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

Para más detalles, por favor lea el artículo this kb Microsoft

Cuestiones relacionadas