2012-10-03 11 views
8

Projekt wdrożony niedawno na platformie Azure rzuca dwa lub trzy z tych wyjątków dziennie. Moje dochodzenie pokazuje, że jest to często spowodowane przez zespoły, które mają na sobie przyszłe znaczniki czasu, generalnie spowodowane przez wdrażanie na komputerach w innych strefach czasowych (this was a good resource). Nie mieliśmy tego problemu wcześniej niż w roku +, gdy aplikacja była na żywo i otrzymuje o wiele więcej ruchu niż sugerowałaby garstka wyjątków.ArgumentOutOfRangeException na platformie Azure z System.Web.HttpCachePolicy.UtcSetLastModified (DateTime utcDate)

Ponownie wdrożyłem z włączonym zdalnym pulpitem i sprawdziłem znaczniki czasu naszych bibliotek dll i zawartość katalogów montażowych \ Windows \ Microsoft.NET i \ Windows \ i nie znalazłem żadnych "przyszłych" znaczników czasu. W tym momencie utknąłem i będę wdzięczny za pomysły.

stosu Ślad:

System.ArgumentOutOfRangeException: Określony argument ten był poza zakresem poprawnych wartości. Nazwa Parametr: utcDate na System.Web.HttpCachePolicy.UtcSetLastModified (DateTime utcDate) na System.Web.HttpCachePolicy.SetLastModified (data DateTime) na System.Web.UI.Page.InitOutputCache (OutputCacheParameters cacheSettings) w Systemie. Web.UI.Page.ProcessRequest (Boolean includeStainsBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) w System.Web.UI.Page.ProcessRequest() w System.Web.UI.Page.ProcessRequest (Kontekst HttpContext) w System.Web.Mvc. OutputCacheAttribute.OnResultExecuting (ResultExecutingContext filterContext) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (Filtr IResultFilter, ResultExecutingContext preContext, Func 1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func 1 ciąg dalszy ation) w System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (filtr IResultFilter, ResultExecutingContext preContext, Func 1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList 1 filtry, ActionResult actionResult) w System.Web.Mvc.Async.AsyncControllerActionInvoker. <> c__DisplayClass27.b__24 (IAsyncResult asyncResult) w System.Web.Mvc.AsyncController. <> c__DisplayClass19.b__14 (IAsyncResult asyncResult) w System.Web.Mvc.Async.AsyncResultWrapper. <> c__DisplayClass4.b__3 (IAsyncResult ar) w System.Web.Mvc.AsyncController.EndExecuteCore (IAsyncResult asyncResult) w System.Web.Mvc.Async.AsyncResultWrapper. <> c__DisplayClass4.b__3 (IAsyncResult ar) w System.Web.Mvc.MvcHandler. <> c__DisplayClass6. <> c__DisplayClassb.b__4 (IAsyncResult asyncResult) w System.Web.Mvc.Async.AsyncResultWrapper. <> c__DisplayClass4.b__3 (IAsyncResult ar) w System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() w System.Web.HttpApplication.ExecuteStep (etap IExecutionStep, logiczna & completedSynchronously)

+0

I Widzę ten sam problem. Spojrzałem na kod System.Web.HttpCachePolicy i System.Web.UI.Page (przez SSCLI) i zobaczyłem, że powinno to być niemożliwe. Ten wyjątek zostanie zgłoszony przy próbie ustawienia daty ostatniej modyfikacji na datę, która będzie w przyszłości (większa niż DateTime.UtcNow). To nigdy nie powinno się zdarzyć, ponieważ framework używa HttpContext.Timestamp, który jest ustawiony na DateTime.UtcNow na początku żądania. Możliwym wyjaśnieniem może być kopanie NTP (synchronizacja czasu) podczas przetwarzania żądania? –

+0

Czy przechowujesz dane w pamięci tabeli, Sprawdź, czy Datetime jest w prawidłowym formacie z czasem UTC. Sprawdź również Konwertowanie Datetime na ciąg znaków i przetestuj go – user145610

Odpowiedz

0

Problemy z strefami czasowymi są bardzo bolesne w środowisku Azure, dlatego sugeruję dodanie zadania startowego i zmianę strefy czasowej Azure Environment. Nie twierdzę, że to rozwiąże twój problem, ale nie zaszkodzi spróbować? Aby zmienić strefę czasową swojego środowiska Azure:

1) Zapisz tzutil /s "Pacific Standard Time" jako .cmd i dołącz plik do projektu.

2) Na ekranie właściwości pliku wybierz "Kopiuj zawsze" jako opcję Kopiuj do wyjścia i "Brak" jako działanie kompilacji.

3) Dodaj poniższe linie do pliku ServiceDefinition:

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

4) I oczywiście dostosować swoje referencje DateTime w projekcie, nie mają do czynienia z konwersji itp

Powiązane problemy