[asp.net] 포스트 백 중 ‘오브젝트의 현재 상태로 인해 작업이 유효하지 않습니다’오류

aspx 페이지가 제대로 작동했지만 갑자기 “오브젝트의 현재 상태로 인해 작업이 유효하지 않습니다.”라는 오류가 발생합니다. 포스트 백이 완료 될 때마다

스택 추적은 다음과 같습니다.

System.Web.HttpRequest.FillInFormCollection ()
의 System.Web.HttpValueCollection.FillFromEncodedBytes (Byte [] bytes, Encoding encoding)
의 System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded ()에서

누군가 도울 수 있습니까?



답변

누군가 귀하의 페이지에 상당히 많은 양식 필드를 게시했습니다. 최근 보안 업데이트에서 도입 된 새로운 기본 최대 값은 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 개가 넘는 양식 필드를 게시하는 사람이 있기 때문에 설정 파일이 아니라 레지스트리에서 설정을 변경해야합니다. 아래 레지스트리에서 MaxHttpCollectionKeys라는 DWORD로 추가해야합니다.

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 기사를 참조하십시오.


답변