2013-01-17 6 views
6

Abbiamo installato. NET Framework 4.5 in uno dei nostri server web. Le nostre applicazioni sono mirate per .net 4.0 ed eseguono più server dietro un sistema di bilanciamento del carico.ASP.NET EventValidation non riesce quando .NET 4.5 Framework è installato in un solo server dietro il servizio di bilanciamento del carico

Dopo l'installazione si ottiene il seguente messaggio di errore per qualche POST chiede

ERROR_NAME = System.ArgumentException error_message = Invalid argument postback o callback. La convalida degli eventi è abilitata utilizzando nella configurazione o <% @ Page EnableEventValidation = "true"%> in una pagina. Per motivi di sicurezza, questa funzionalità verifica che gli argomenti di postback o eventi di callback abbiano origine dal controllo server che li ha originariamente visualizzati. Se i dati sono validi e previsti, utilizzare il metodo ClientScriptManager.RegisterForEventValidation per registrare i dati di postback o callback per la convalida. error_details = Sorgente: System.Web

Il valore __EVENTVALIDATION nel corpo della richiesta è diverso quando viene richiesto dal server con installazione .net 4.5. MSDN afferma che le modifiche alla crittografia in .net 4.5 utilizzano la configurazione di opt-in, quindi per impostazione predefinita dovrebbe essere compatibile con le versioni precedenti.

C'è una modifica di configurazione, senza disabilitare la convalida degli eventi, Devo fare per _EVENTVALIDATION comportarsi lo stesso su macchine con .net 4.5 installato come si comporta solo con .net 4.0?

+1

È questo quando si esegue in modo isolato su questo server da solo? Il bilanciamento del carico ha la persistenza abilitata? È possibile che questo server riceva un post da un server web diverso che non ha 4.5? –

+0

Funziona perfettamente in modo isolato. Penso che il problema si verifichi quando la richiesta iniziale proviene da un server senza .net 4.5 e un post lo porta al server con .net 4.5 installato – chrisk

+0

Verificare di non aver cambiato le chiavi della macchina e così via, ma la scommessa migliore è verificare non ci sono altri problemi e si estendono al resto dei server. Nel frattempo, implementare la persistenza nel bilanciamento del carico per eliminare le chiamate tra server fino a quando tutte le patch possono essere riparate. Le modalità ibride non sembrano mai funzionare correttamente. –

risposta

0

mi piacerebbe verificare le configurazioni chiave della macchina e assicurarsi che i suoi lo stesso su tutti i server. Uses for MachineKey in ASP.NET e http://aspnetresources.com/tools/machineKey

Inoltre, è possibile controllare se avete script lato client

"Se si scrive script client che cambia un controllo nel client in fase di esecuzione, potrebbe essere necessario utilizzare il metodo RegisterForEventValidation al fine di evitare errori di convalida di eventi falsi. "

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

6

Ho avuto lo stesso problema come stiamo migrando nostra server farm a Windows 2012 (.NET 4.5) a partire dal 2003 (NET 4.0). Esaminando ClientScriptManager, il codice di convalida dell'evento è notevolmente cambiato.

Una correzione per questo è stato quello di aggiungere l'appSetting di utilizzare la compatibilità Legacy convalida degli eventi come descritto here

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

Ora i valori generati per la convalida evento nelle mie pagine sono le stesse sia generato da .NET 4.0 o 4 .5

+0

Non abbiamo una server farm per testarlo ora, ma suona sicuramente come una buona soluzione. Non ho trovato questa soluzione dopo aver fatto ricerche approfondite su google e msdn. – chrisk

+1

Ricordare di rimuovere questo valore una volta completata la migrazione. Includiamo questi switch solo per gli scenari di migrazione e intendiamo completamente rimuoverli in un aggiornamento futuro. La tua applicazione potrebbe essere danneggiata se continui a fare affidamento su questa opzione e la rimuoviamo. – Levi

+0

@Levi Questo non è stato documentato in [Compatibilità delle applicazioni in .NET Framework 4.5] (http://msdn.microsoft.com/en-us/library/hh367887%28v=vs.110%29.aspx#asp), è stato documentato solo su [http://msdn.microsoft.com/en-us/library/hh975440.aspx](http://msdn.microsoft.com/en-us/library/hh975440.aspx), che era molto più difficile da trovare (a meno che non si sappia già cercare). –

Problemi correlati