2012-10-03 22 views
8

一個項目近期開始扔兩三這些異常的一天。我的調查顯示,這通常是由未來具有未來時間戳的程序集引起的,這通常是由部署到其他時區(this was a good resource)中的計算機引起的。在這一年中,我們沒有遇到過這個問題,即該應用程序已經運行,並且接收的流量比少數例外情況下的流量要多得多。ArgumentOutOfRangeException從部署在Azure中System.Web.HttpCachePolicy.UtcSetLastModified(DateTime的utcDate)

我重新部署了啓用遠程桌面,並檢查了我們dll的時間戳和\ Windows \ Microsoft.NET和\ Windows \ assembly目錄的內容,但未找到任何「未來」時間戳。在這一點上,我卡住了,並且會很感激想法。

堆棧跟蹤:

System.ArgumentOutOfRangeException:指定的參數已超出有效值的範圍。 參數名:utcDate 在System.Web.HttpCachePolicy.UtcSetLastModified(DateTime的utcDate) 在System.Web.HttpCachePolicy.SetLastModified(DateTime的日期) 在System.Web.UI.Page.InitOutputCache(OutputCacheParameters cacheSettings) 的系統。 Web.UI.Page.ProcessRequest(布爾includeStagesBeforeAsyncPoint,布爾includeStagesAfterAsyncPoint) 在System.Web.UI.Page.ProcessRequest() 在System.Web.UI.Page.ProcessRequest(HttpContext上下文) 在System.Web.Mvc。 OutputCacheAttribute.OnResultExecuting(ResultExecutingContext filterContext) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter,ResultExecutingContext preContext,Func 1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func 1 continu ation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter,ResultExecutingContext preContext,Func 1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList 1 filters,ActionResult actionResult) at System.Web.Mvc.Async.AsyncControllerActionInvoker。 <> c__DisplayClass27.b__24(IAsyncResult asyncResult) at System.Web.Mvc.AsyncController。 <> c__DisplayClass19.b__14(IAsyncResult的asyncResult) 在System.Web.Mvc.Async.AsyncResultWrapper。 <>在System.Web.Mvc.AsyncController.EndExecuteCore(IAsyncResult asyncResult) 上的c__DisplayClass4.b__3(IAsyncResult ar) at System.Web.Mvc.Async.AsyncResultWrapper。 <> c__DisplayClass4.b__3(IAsyncResult ar) at System.Web.Mvc.MvcHandler。 <> c__DisplayClass6。 <> c__DisplayClassb.b__4(IAsyncResult的asyncResult) 在System.Web.Mvc.Async.AsyncResultWrapper。 <> c__DisplayClass4.b__3(IAsyncResult的AR) 在System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在System.Web.HttpApplication.ExecuteStep(IExecutionStep步驟,布爾& completedSynchronously)

+0

我看到同樣的問題。我查看了System.Web.HttpCachePolicy和System.Web.UI.Page代碼(通過SSCLI),發現這應該是不可能的。當您嘗試將最後修改日期設置爲將來的日期(大於DateTime.UtcNow)時,會引發該異常。這不應該發生,因爲框架使用HttpContext.Timestamp,它在請求開始時設置爲DateTime.UtcNow。一個可能的解釋可能是NTP(時間同步)在請求正在處理時踢入? –

+0

您是否將任何數據存儲在表存儲器中,查看Datetime是否使用UTC時間格式正確。同時檢查將日期時間轉換爲字符串並對其進行測試 – user145610

回答

0

時區問題在Azure環境中確實令人頭疼,因此我建議您添加啓動任務並更改Azure環境的時區。我沒有聲稱這會解決你的問題,但它不會傷害嘗試做到這一點?要更改時區的Azure的環境:

1)除tzutil /s "Pacific Standard Time"爲.CMD和包括文件到您的項目。

2)在文件的屬性屏幕中,選擇「複製總是」爲你複製到輸出選項和「無」作爲構建行動。

3)以下內容添加到您的服務定義文件:

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

4)當然,適應在你的項目中的日期時間的參考,你不必處理轉換等