Questo è uno degli errori più strani che abbia mai visto.La chiave della cache causa l'errore "La negazione del valore minimo di un numero di complemento twos non è valida."
Sto facendo una chiamata molto semplice per restituire i valori dalla cache HttpRuntime. La chiamata è:
return HttpContext.Current.Cache[cacheKey];
Se restituisce null, va bene. Controllo se il valore restituito è nullo e agisco di conseguenza. Sto usando questa chiamata da molto tempo.
Recentemente, per qualche ragione, quando cacheKey è impostato su questo valore esatto: è gettato
"Topic_GridSelectAll:5,null,2010-08-31-20-00-00,Published,desc,5,1"
uno System.OverflowException: Negare il valore minimo di un numero complemento a due non è valido.
Nulla sulla chiamata, sul codice associato o sul server è cambiato. Se cacheKey ha caratteri leggermente diversi, funziona perfettamente. Per esempio, questo cacheKey restituisce un valore nullo senza lanciare alcuna eccezione:
"Topic_GridSelectAll:5,null,2010-08-31-21-00-00,Published,desc,5,1"
Avviso, l'unica differenza tra questi due stringhe è i personaggi del tempo: 2010-08-31-20-00-00 contro 2010-08-31 -21-00-00.
Perché diavolo farebbe differenza? E perché ora dopo tutto questo tempo?
L'analisi dello stack è:
[OverflowException: Negating the minimum value of a twos complement number is invalid.]
System.Math.AbsHelper(Int32 value) +12753486
System.Web.Caching.CacheMultiple.UpdateCache(CacheKey cacheKey, CacheEntry newEntry, Boolean replace, CacheItemRemovedReason removedReason, Object& valueOld) +142
System.Web.Caching.CacheInternal.DoGet(Boolean isPublic, String key, CacheGetOptions getOptions) +122
MyProject.Helpers.CacheHelper.GetData(String cacheDomain, String cacheKey) in ...
Ho provato a cambiare la chiamata cache per utilizzare HttpRuntime.Cache invece (cioè HttpRuntime.Cache[cacheKey]
.), Ma che ha fatto alcuna differenza. So che è lo stesso provider di cache sottostante, ma ho pensato che forse la chiamata diversa avrebbe fatto la differenza. Niente da fare.
Penso che questa sia la prima domanda "strano errore" che ho visto che in realtà era uno strano errore. :) – Guffa