大家在編譯項目的時候,一定要觀察本機時間是否“正常”,像我就是經常會為測試某一個東西而去向后調整系統時間,此時要是你匆匆忙忙忘記改回時間而直接發布你的作品,就可能會出現“異常”,具體是何種異常呢?……
我跟很多朋友一樣,喜歡在組件中使用內嵌資源的方式進行資源輸出,這樣的好處就是:利用部分瀏覽器的相關機理來緩存這些文件而不必每次都加載,它們通常通過一個時間戳來表示該項內容是應該從緩存(客戶端本地)中讀取還是重新下載(遠端服務器),而這個時間戳就被跟在了下載該資源的鏈接上了。
平時大家通常在測試的時候都是單機環境,因此通常不會發生什么問題,但是在生產環境中或者遷移到別人的機上就會出現一些問題了。
指定的參數已超出有效值的范圍。
參數名: utcDate
說明: 執行當前 Web 請求期間,出現未處理的異常。請檢查堆棧跟蹤信息,以了解有關該錯誤以及代碼中導致錯誤的出處的詳細信息。
異常詳細信息: System.ArgumentOutOfRangeException: 指定的參數已超出有效值的范圍。
參數名: utcDate
源錯誤:
執行當前 Web 請求期間生成了未處理的異常。可以使用下面的異常堆棧跟蹤信息確定有關異常原因和發生位置的信息。
堆棧跟蹤:
[ArgumentOutOfRangeException: 指定的參數已超出有效值的范圍。 參數名: utcDate] System.Web.HttpCachePolicy.UtcSetLastModified(DateTime utcDate) +3352419 System.Web.HttpCachePolicy.SetLastModified(DateTime date) +47 System.Web.Handlers.AssemblyResourceLoader.System.Web.IHttpHandler.ProcessRequest(HttpContext context) +1904 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +358 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +64
--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.1433; ASP.NET 版本:2.0.50727.1433
因為通常這時候網頁并不會加載錯誤,所以我們可以很明確的知道并不是頁面生命周期內發生了異常。如果是腳本資源,通常我們打開IE的腳本調試功能會彈出對象無法初始化的錯誤以及一些腳本異常。如果是css文件則會出現樣式丟失的現象。既然不是頁面生命周期內發生了錯誤,我們沒有理由去檢查代碼,特別是當代碼曾一度輝煌,我們更沒有理由去那么懷疑。這時候我們有理由想到托管我們代碼的IIS,仔細觀察提示我們應該對utcDate有一個比較深的印象。如果我們的資源是在未來創建的呢?oh,這不可能,但是當我們將系統的時間改成比資源文件的創建時間更早的時候就有理由相信這一切就成為可能了。
解決方法:
1、通過修改服務器系統時間,讓其比Assembly的時間要晚,則可以了。(這適合于Assembly是別人創建的時候,當然也適合自己擁有源碼的時候)。
2、通過修改Assembly的創建時間,讓其早于服務器的時間,則可以了。(這適合于服務器是別人的,當然也適合于服務器是自己的情況)。
新聞熱點
疑難解答
圖片精選