2012-10-03 7 views
8

Un progetto distribuito in Azure ha recentemente iniziato a generare due o tre di queste eccezioni al giorno. Le mie indagini mostrano che questo è spesso causato da assembly che hanno timestamp futuri su di essi, generalmente causati dalla distribuzione su macchine in altri fusi orari (this was a good resource). Non abbiamo riscontrato questo problema prima dell'anno + che l'app è stata pubblicata e riceve molto più traffico rispetto a quanto suggerito da una manciata di eccezioni.ArgumentOutOfRangeException in Azure da System.Web.HttpCachePolicy.UtcSetLastModified (DateTime utcDate)

Sono stato ridistribuito con il desktop remoto abilitato e ho controllato i timestamp delle nostre DLL e il contenuto delle directory di \ Windows \ Microsoft.NET e \ Windows \ assembly e non ho trovato timestamp "futuri". A questo punto sono bloccato e sarei grato per le idee.

dello stack:

System.ArgumentOutOfRangeException: specificato l'argomento era fuori l'intervallo di valori validi. Nome parametro: UTCDate a System.Web.HttpCachePolicy.UtcSetLastModified (DateTime UTCDate) alla System.Web.HttpCachePolicy.SetLastModified (data DateTime) a System.Web.UI.Page.InitOutputCache (OutputCacheParameters cacheSettings) al sistema. Web.UI.Page.ProcessRequest (booleano includeStagesBeforeAsyncPoint, booleano includeStagesAfterAsyncPoint) a System.Web.UI.Page.ProcessRequest() a System.Web.UI.Page.ProcessRequest (contesto HttpContext) a System.Web.Mvc. OutputCacheAttribute.OnResultExecuting (ResultExecutingContext filterContext) a System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (filtro IResultFilter, ResultExecutingContext preContext, Func 1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func 1 continua a) su System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (filtro IResultFilter, ResultExecutingContext preContext, Func 1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList 1 filtri, ActionResult actionResult) su System.Web.Mvc.Async.AsyncControllerActionInvoker. <> c__DisplayClass27.b__24 (IAsyncResult asyncResult) su System.Web.Mvc.AsyncController. <> c__DisplayClass19.b__14 (IAsyncResult asyncResult) in System.Web.Mvc.Async.AsyncResultWrapper. <> c__DisplayClass4.b__3 (IAsyncResult ar) in System.Web.Mvc.AsyncController.EndExecuteCore (IAsyncResult asyncResult) in System.Web.Mvc.Async.AsyncResultWrapper. <> c__DisplayClass4.b__3 (IAsyncResult ar) su System.Web.Mvc.MvcHandler. <> c__DisplayClass6. <> c__DisplayClassb.b__4 (IAsyncResult asyncResult) su System.Web.Mvc.Async.AsyncResultWrapper. <> c__DisplayClass4.b__3 (IAsyncResult ar) a System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() a System.Web.HttpApplication.ExecuteStep (IExecutionStep passo, booleano & completedSynchronously)

+0

I' Sto vedendo lo stesso problema. Ho guardato il codice System.Web.HttpCachePolicy e System.Web.UI.Page (tramite SSCLI) e ho visto che questo dovrebbe essere impossibile. Tale eccezione viene generata quando si tenta di impostare l'ultima data di modifica su una data futura (maggiore di DateTime.UtcNow). Questo non dovrebbe mai accadere poiché il framework utilizza HttpContext.Timestamp, che è impostato su DateTime.UtcNow all'inizio della richiesta. Una possibile spiegazione potrebbe essere NTP (time syncing) kicking mentre la richiesta è in elaborazione? –

+0

Memorizza i dati nella memoria della tabella. Verifica se Datetime è nel formato corretto con l'ora UTC. Controlla anche la conversione di Datetime in stringa e testalo – user145610

risposta

0

I problemi relativi al fuso orario sono davvero un problema in Azure Environment, quindi suggerisco di aggiungere un'attività di avvio e modificare il fuso orario di Azure Environment. Non sto affermando che questo risolverà il tuo problema ma non fa male provare lo fa? Per modificare il fuso orario dell'ambiente Azure:

1) Salvare tzutil /s "Pacific Standard Time" come .cmd e includere il file nel progetto.

2) Nella schermata delle proprietà del file, selezionare "Copia sempre" come opzione Copia in uscita e "Nessuno" come azione di creazione.

3) Aggiungere il seguente al file servicedefinition:

<Startup> 
    <Task commandLine="nameOfFileYouCreated.cmd" executionContext="elevated" /> 
</Startup> 

4) E, naturalmente, adattare i riferimenti DateTime nel progetto, non si hanno a che fare con le conversioni, ecc

Problemi correlati