2012-10-03 19 views
8

Một dự án được triển khai trong Azure gần đây đã bắt đầu ném hai hoặc ba trong số các trường hợp ngoại lệ này mỗi ngày. Cuộc điều tra của tôi cho thấy rằng điều này thường do các hội đồng có dấu thời gian trong tương lai gây ra, thường là do triển khai tới các máy trong các múi giờ khác (this was a good resource). Chúng tôi chưa gặp phải vấn đề này trước đó trong năm + rằng ứng dụng đã hoạt động và nó nhận được nhiều lưu lượng truy cập hơn số lượng ngoại lệ sẽ đề xuất.ArgumentOutOfRangeException trong Azure từ System.Web.HttpCachePolicy.UtcSetLastModified (DateTime utcDate)

Tôi triển khai lại với máy tính từ xa được bật và kiểm tra dấu thời gian của các tệp dll và nội dung của thư mục \ Windows \ Microsoft.NET và \ Windows \ assembly và không tìm thấy dấu thời gian "trong tương lai". Tại thời điểm này tôi bị mắc kẹt, và sẽ biết ơn ý tưởng.

Stack Trace:

System.ArgumentOutOfRangeException: Được chỉ định tham số đã được ra khỏi phạm vi của các giá trị hợp lệ. Tên Parameter: utcDate tại System.Web.HttpCachePolicy.UtcSetLastModified (DateTime utcDate) tại System.Web.HttpCachePolicy.SetLastModified (ngày DateTime) tại System.Web.UI.Page.InitOutputCache (OutputCacheParameters cacheSettings) tại hệ thống. Web.UI.Page.ProcessRequest (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) tại System.Web.UI.Page.ProcessRequest() tại System.Web.UI.Page.ProcessRequest (HttpContext context) tại System.Web.Mvc. OutputCacheAttribute.OnResultExecuting (ResultExecutingContext filterContext) tại System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (Bộ lọc IResultFilter, ResultExecutingContext preContext, Func 1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func 1 liên tục ation) tại System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter (Bộ lọc IResultFilter, ResultExecutingContext preContext, Func 1 continuation) at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList 1 bộ lọc, ActionResult actionResult) tại System.Web.Mvc.Async.AsyncControllerActionInvoker. <> c__DisplayClass27.b__24 (IAsyncResult asyncResult) tại System.Web.Mvc.AsyncController. <> c__DisplayClass19.b__14 (IAsyncResult asyncResult) tại System.Web.Mvc.Async.AsyncResultWrapper. <> c__DisplayClass4.b__3 (IAsyncResult ar) tại System.Web.Mvc.AsyncController.EndExecuteCore (IAsyncResult asyncResult) tại System.Web.Mvc.Async.AsyncResultWrapper. <> c__DisplayClass4.b__3 (IAsyncResult ar) tại System.Web.Mvc.MvcHandler. <> c__DisplayClass6. <> c__DisplayClassb.b__4 (IAsyncResult asyncResult) tại System.Web.Mvc.Async.AsyncResultWrapper. <> c__DisplayClass4.b__3 (IAsyncResult ar) tại System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() tại System.Web.HttpApplication.ExecuteStep (IExecutionStep bước, Boolean & completedSynchronously)

+0

tôi m thấy cùng một vấn đề. Tôi đã xem mã System.Web.HttpCachePolicy và System.Web.UI.Page (thông qua SSCLI) và thấy rằng điều này là không thể. Ngoại lệ đó bị ném khi bạn thử đặt ngày sửa đổi cuối cùng thành ngày trong tương lai (lớn hơn DateTime.UtcNow). Điều này sẽ không bao giờ xảy ra khi khung công tác sử dụng HttpContext.Timestamp, được đặt thành DateTime.UtcNow khi bắt đầu yêu cầu. Một lời giải thích có thể có thể là NTP (đồng bộ hóa thời gian) khởi động trong khi yêu cầu đang được xử lý? –

+0

Bạn có lưu trữ bất kỳ dữ liệu nào trong bộ nhớ bảng hay không, Xem liệu Thời gian có đúng định dạng với thời gian UTC hay không. Đồng thời kiểm tra Chuyển đổi ngày giờ thành chuỗi và kiểm tra nó – user145610

Trả lời

0

Vấn đề múi giờ thực sự là một nhức đầu trong môi trường Azure vì vậy tôi đề nghị bạn thêm một nhiệm vụ khởi động và thay đổi múi giờ của Azure môi trường. Tôi không tuyên bố điều này sẽ giải quyết vấn đề của bạn nhưng nó không đau để thử làm điều đó? Để thay đổi Múi giờ của Môi trường Azure của bạn:

1) Lưu tzutil /s "Pacific Standard Time" dưới dạng .cmd và đưa tệp vào dự án của bạn.

2) Trong màn hình thuộc tính của tệp, chọn "Sao chép luôn luôn" làm tùy chọn Sao chép sang đầu ra của bạn và "Không" làm Hành động xây dựng của bạn.

3) Thêm dòng sau vào file ServiceDefinition của bạn:

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

4) Và dĩ nhiên thích nghi với tài liệu tham khảo DateTime của bạn trong dự án của bạn, bạn không phải đối phó với các chuyển đổi, vv

Các vấn đề liên quan