2013-01-17 21 views
6

Zainstalowaliśmy .NET 4.5 Framework na jednym z naszych serwerów internetowych. Nasze aplikacje są przeznaczone dla .net 4.0 i uruchamiają wiele serwerów za równoważeniem obciążenia.Zdarzenie ASP.NET EventValidation kończy się niepowodzeniem, gdy platforma .NET 4.5 jest zainstalowana tylko na jednym serwerze za modułem równoważenia obciążenia.

Po instalacji otrzymujemy następujący komunikat o błędzie jakiegoś POST żąda

ERROR_NAME = System.ArgumentException error_message = Błędny ogłaszania zwrotnego lub zwrotnej argument. Sprawdzanie poprawności zdarzeń jest włączone przy użyciu w konfiguracji lub <% @ Page EnableEventValidation = "true"%> na stronie. Ze względów bezpieczeństwa funkcja ta weryfikuje, czy argumenty dotyczące wywołania zwrotnego lub wywołania zwrotnego pochodzą z kontrolki serwera, która pierwotnie je wyrenderowała. Jeśli dane są poprawne i oczekiwane, użyj metody ClientScriptManager.RegisterForEventValidation, aby zarejestrować dane dotyczące oddzwonienia lub wywołania zwrotnego do sprawdzania poprawności. error_details = Źródło: System.Web

Wartość __EVENTVALIDATION w treści żądania jest inna, gdy zażąda tego serwer z instalacją .net 4.5. MSDN wspomina, że ​​kryptografia zmienia się w .net 4.5 używa konfiguracji opt-in, więc domyślnie powinna być kompatybilna wstecz.

Czy istnieje zmiana konfiguracji, bez wyłączania sprawdzania poprawności zdarzeń, muszę zrobić dla _EVENTVALIDATION, aby zachowywać się tak samo na komputerach z zainstalowanym .net 4.5, ponieważ zachowuje się tylko z .net 4.0?

+1

Czy dzieje się to tylko w przypadku izolacji na tym serwerze? Czy funkcja równoważenia obciążenia jest włączona? Czy to możliwe, że ten serwer odbiera wpis z innego serwera WWW, który nie ma 4.5? –

+0

Działa dobrze w sposób izolowany. Myślę, że problem występuje, gdy początkowe żądanie pochodzi z serwera bez .net 4.5, a post przenosi go na serwer z zainstalowaną wersją .net 4.5. – chrisk

+0

Sprawdź, czy nie zmienił on kluczy maszynowych i takich, ale najlepiej jest sprawdzić nie ma innych problemów i nie można się z nimi skontaktować na pozostałych serwerach. W międzyczasie zaimplementuj funkcję wytrwałości w module równoważenia obciążenia, aby wyeliminować połączenia między serwerami do momentu, aż wszystkie będą mogły zostać załatane. Tryby hybrydowe nigdy nie wydają się działać poprawnie. –

Odpowiedz

0

bym sprawdzić dla maszyny kluczowych konfiguracji i upewnij się jej takie same na wszystkich serwerach. Uses for MachineKey in ASP.NET i http://aspnetresources.com/tools/machineKey

Ponadto, można sprawdzić, czy masz żadnych skryptów po stronie klienta

„Jeśli piszesz skrypt klienta, który zmienia kontrolę w kliencie w czasie wykonywania, może trzeba użyć metody RegisterForEventValidation w celu uniknięcia fałszywych błędów walidacji zdarzeń. "

http://msdn.microsoft.com/en-us/library/system.web.ui.page.enableeventvalidation.aspx

6

miałem ten sam problem jak obecnie migracji naszą farmę serwerów Windows 2012 (.NET 4.5) z roku 2003 (.NET 4.0). Patrząc na ClientScriptManager, kod walidacji zdarzeń znacznie się zmienił.

rozwiązanie tego było dodać AppSetting używać kompatybilność Legacy Event Validation jak opisano here

<appSettings> 
    <add key="aspnet:UseLegacyEventValidationCompatibility" value="true" /> 
</appSettings> 

Teraz Wartości uzyskane dla walidacji zdarzeń w moich stronach są takie same, czy generowany przez .NET 4.0 lub 4 .5

+0

Nie mamy farmy serwerów, aby przetestować to teraz, ale to z pewnością brzmi jak dobre rozwiązanie. Nie natknąłem się na to rozwiązanie po przeprowadzeniu obszernego wyszukiwania w google i msdn. – chrisk

+1

Pamiętaj, aby usunąć tę wartość po zakończeniu migracji. Uwzględniamy te przełączniki tylko w scenariuszach migracji iw pełni zamierzamy je usunąć w przyszłej aktualizacji. Twoja aplikacja może zostać zerwana, jeśli nadal będziesz polegać na tym przełączniku i usuniemy go. – Levi

+0

@Levi Nie zostało to udokumentowane w [Zgodność aplikacji w .NET Framework 4.5] (http://msdn.microsoft.com/en-us/library/hh367887%28v=vs.110%29.aspx#asp), zostało to tylko udokumentowane na [http://msdn.microsoft.com/en-us/library/hh975440.aspx](http://msdn.microsoft.com/en-us/library/hh975440.aspx), co było o wiele trudniej znaleźć (chyba, że ​​już wiesz, czego szukasz). –