2012-04-25 27 views
10

मुझे डेटटाइम पर एक अपवाद फेंक रहा है.अब हमारे सर्वर पर कुछ वेबसाइटें चल रही हैं। यह पिछले 3 दिनों में मेरे साथ दो बार हुआ है। बहुत अजीब। मैं सोच रहा हूँ इस के साथ नवीनतम Windows अद्यतन होने की शुरू हो गया है और आप में से किसी समान व्यवहार में आ रहा है देखा है अगर है कि क्याडेटटाइम.अब एक अपवाद फेंक रहा है

अपवाद है:।

BASE EXCEPTION: 
    TYPE: System.ArgumentOutOfRangeException 
    MESSAGE: Value to add was out of range. 
Parameter name: value 
    STACK TRACE: 
    at System.DateTime.Add(Double value, Int32 scale) 
    at System.TimeZoneInfo.TransitionTimeToDateTime(Int32 year, TransitionTime transitionTime) 
    at System.TimeZoneInfo.GetDaylightTime(Int32 year, AdjustmentRule rule) 
    at System.TimeZoneInfo.GetIsDaylightSavingsFromUtc(DateTime time, Int32 Year, TimeSpan utc, AdjustmentRule rule, Boolean& isAmbiguousLocalDst) 
    at System.TimeZoneInfo.GetDateTimeNowUtcOffsetFromUtc(DateTime time, Boolean& isAmbiguousLocalDst) 
    at System.DateTime.get_Now() 
    at (my code).FrontEnd.FrontEndPage.Page_Load(Object sender, EventArgs e) in (my code file)\code\presentation\FrontEndPage.cs:line 118 
    at (my code).purchase.Page_Load(Object sender, EventArgs e) in (my code file)\purchase.aspx.cs:line 94 
    at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) 
    at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) 
    at System.Web.UI.Control.OnLoad(EventArgs e) 
    at System.Web.UI.Control.LoadRecursive() 
    at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) 

कोड जहां ऐसा होता है पहला है अगर-बयान में रेखा:

HttpCookie loggedIn = Request.Cookies[Config.Instance.LoggedInCookieName]; 
if (loggedIn != null) 
{ 
    loggedIn.Expires = DateTime.Now.AddHours(4); 
    Response.Cookies.Add(loggedIn); 
} 

यद्यपि है वहाँ में एक AddHours और अपवाद DateTime.Add के बारे में बात कर रही है, मैं नहीं मानता कि यह AddHours से कोई लेना देना नहीं है, लेकिन के कारण होता है अब कॉल करें क्योंकि आप स्टैक ट्रेस में देख सकते हैं।

मैं जिस सर्वर पर हूं, वह Windows Server 2003 चला रहा है, और अंग्रेज़ी (यूनाइटेड किंगडम) लोकेल चला रहा है।

किसी भी मदद के लिए धन्यवाद।

+1

या तो एक डोडी विंडोज अपडेट की तरह लगता है जो इसे या .NET की दूषित स्थापना के कारण लगता है ... – Noldorin

+0

क्या आप पूर्ण स्टैक ट्रेस प्रदान कर सकते हैं?शायद इसके साथ कुछ करने के लिए है? http://blog.brianhartsock.com/2009/02/21/systemargumentoutofrangeexception-at-systemwebhttpcachepolicyutcsetlastmodifieddatetime-utcdate/ – mellamokb

+0

मुझे पता है कि यह असंभव प्रतीत हो सकता है, लेकिन क्या सिस्टम समय सही ढंग से सेट है? – hatchet

उत्तर

0

यह डेटटाइम के कारण हो सकता है.अब थ्रेडसेफ नहीं है (जो मुझे विश्वास है कि एक बग होगा)। मैंने उस बग वाले .NET के कुछ संस्करणों के बारे में सुना है। यह आवश्यक रूप से लॉक में कोड की अपनी लाइन को लपेटने में मदद नहीं करेगा, क्योंकि डेटटाइम पर सभी कॉल.अब इसी तरह से इलाज करना होगा। कामकाज के रूप में, मैं ऐसा करने की सिफारिश करता हूं कि उसी प्रश्न में व्यक्ति ने क्या किया - डेटटाइम द्वारा अपवाद को फेंक दो.अब और दूसरी बार कोशिश करें।

क्या आप एक छोटा टेस्ट ऐप लिख सकते हैं जो डेटटाइम को कॉल करता है.अब कई धागे पर इसे मजबूर करने के लिए कई बार और सत्यापित करें कि क्या कारण है?

वेबसाइटों द्वारा नेट के किस संस्करण का उपयोग किया जा रहा है?

+0

सभी डेटटाइम सदस्य थ्रेडसेफ हैं। – porges

+0

@Porges - यह मेरी समझ भी है। लेकिन यह विशेष रूप से अन्य समान स्टैक ओवरफ्लो प्रश्नों के लक्षणों को फिट करता है, जहां यह एक कॉल पर असफल रहा, तो यह तुरंत डेटटाइम को कॉल करके सफल हुआ.अब फिर से। – hatchet

+0

.NET Framework का उपयोग किया गया है .NET Framework 4 –

1

परावर्तक में कोड की समीक्षा करना, आपका अपवाद तब होता है जब एक इन-लाइन AddDays को TransitionTimeToDateTime में खराब डेटा दिया जाता है।

AddDays प्रक्रिया transitionTime.DayOfWeek जहां transitionTimerule.DaylightTransitionStart या GetDaylightTime से rule.DaylightTransitionEnd है दोनों घटनाओं (और साथ ही time.DayOfWeek, लेकिन यह हमेशा Mod 7 है)।

ऐसा लगता है कि GetTimeZoneInformation कभी-कभी खराब डेटा लौटा रहा है जहां AdjustmentRuleGetOneYearLocalFromUtc में उत्पन्न होता है जो GetCurrentOneYearLocal पर कॉल करता है।

क्योंकि यह शायद ही कभी हो रहा है, मुझे नहीं लगता कि यह भ्रष्ट रजिस्ट्री के कारण होगा (मुझे लगता है कि यह हर बार होता है।), लेकिन TIME_ZONE_INFORMATION के लिए एमएसडीएन दस्तावेज़ों की जांच करने में मदद करने के लिए रजिस्ट्री प्रविष्टियों का वर्णन करता है जाँच करने के लिए।

नोट इस जानकारी कैश्ड नहीं होता और हर बार जब आप DateTime.Now फोन लिया गया है, (बेशक डीएसटी के रूप में करने के लिए सही बात की है जो सिर्फ बदल गया होगा, या उपयोगकर्ता वर्तमान समय क्षेत्र बदल गया होगा) एक DateTime.UtcNow का उपयोग करके कुछ समयपूर्व अनुकूलन के लिए अच्छा बहाना और जितना संभव हो सके .ToLocalTime लागू करना जब आपको उपयोगकर्ता को समय प्रदर्शित करना होगा।

संबंधित मुद्दे