Błąd „Operacja nie jest prawidłowa ze względu na bieżący stan obiektu” podczas ogłaszania zwrotnego


170

Miałem stronę aspx, która działała dobrze, ale nagle pojawia się komunikat o błędzie „Operacja jest nieprawidłowa z powodu bieżącego stanu obiektu”. zawsze, gdy ogłaszanie zwrotne jest gotowe.

Ślad stosu to:

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

Czy ktoś może pomóc?


Odpowiedzi:


281

Ktoś umieścił na Twojej stronie sporo pól formularza. Nowe domyślne maksimum wprowadzone w ostatniej aktualizacji zabezpieczeń to 1000.

Spróbuj dodać następujące ustawienie w <appsettings>bloku web.config . w tym bloku maksymalizujesz wartości MaxHttpCollection, co spowoduje zastąpienie wartości domyślnych ustawionych przez .net Framework. możesz odpowiednio zmienić wartość zgodnie z potrzebami formularza

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

Aby uzyskać więcej informacji, przeczytaj ten post. Więcej informacji na temat poprawki zabezpieczeń opracowanej przez firmę Microsoft można znaleźć w tym artykule z bazy wiedzy



40

Nie zastosowałem stronicowania w moim widoku siatki i obejmuje ponad 600 rekordów (z polem wyboru, przyciskami itp.), A wartość 2001 nie zadziałała. Możesz zwiększyć wartość, powiedzmy 10000 i przetestować.

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

16

W przypadku ASP.NET 1.1 jest to nadal spowodowane publikacją ponad 1000 pól formularza, ale ustawienie należy zmienić w rejestrze, a nie w pliku konfiguracyjnym. Powinien zostać dodany jako DWORD o nazwie MaxHttpCollectionKeys w rejestrze w

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\1.1.4322.0

dla 32-bitowych wersji systemu Windows i

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

dla 64-bitowych wersji systemu Windows.


6

Jeśli ślad stosu wygląda następująco, wysyłasz do serwera ogromne obciążenie obiektów 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)

Aby rozwiązać problem, zaktualizuj konfigurację sieciową za pomocą następującego klucza. Jeśli nie możesz uzyskać śladu stosu, użyj programu Fiddler . Jeśli to nadal nie pomoże, spróbuj zwiększyć liczbę do 10000 lub coś podobnego

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

Aby uzyskać więcej informacji, przeczytaj ten artykuł Microsoft KB

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.