2012-02-07 11 views
7

मैं उन उपयोगकर्ताओं पर कुछ जानकारी कैप्चर कर रहा हूं जो मेरी वेबसाइट के किसी विशेष अनुभाग पर जाते हैं और मुझे एक अजीब त्रुटि मिल रही है। मेरे पास कोड का एक अनुभाग है जो निम्न कार्य करता है।HttpRequestBase.UserHostAddress फेंकने त्रुटि

string userIp = request.UserHostAddress; 

अनुरोध चर एक HttpRequestBase है। कभी-कभी यह ठीक काम करता है और मुझे आईपी मिलती है - दूसरी बार यह एक त्रुटि फेंकता है कि मुझे यकीन नहीं है कि इसके खिलाफ सुरक्षा कैसे करें। यह मेरे त्रुटि लॉग से है।

"मान System.Web.Hosting.IIS7WorkerRequest.GetServerVariableInternal (स्ट्रिंग नाम) पर System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal (Int32 errorCode, IntPtr errorInfo) में अपेक्षित सीमा में नहीं आती।"

ऐसा लगता है कि पहली बार जब मैं किसी पृष्ठ पर जाता हूं तो यह ठीक काम करता है, अगर मैं रीफ्रेश करता हूं तो त्रुटि फेंक दी जाती है, या उसी पृष्ठ पर तेज़ी से जाती है जो समान चर को कैप्चर करती है।

+0

देखें कि यह आपकी मदद करता है: http://stackoverflow.com/questions/650357/httprequest-servervariables-throws-argumentexception-in-wcf-with-iis7 –

+0

मैंने पोस्ट करने से पहले इसे पढ़ा। यह यहां लागू नहीं होता है। मैं वनवे पर अनुबंध स्थापित नहीं कर रहा हूं। – Mitch

+0

क्या आप 'System.Web.HttpContext.Current.Request.UserHostAddress' आज़मा सकते हैं - बस अगर HttpRequestBase HttpRequest –

उत्तर

6

मेरे पास मेरे लॉगर के साथ यह सही समस्या थी। मैं निर्भरता इंजेक्शन का उपयोग कर रहा हूं, क्योंकि मुझे संदेह है कि आप हैं।

मेरे मामले में, मुझे यह त्रुटि मिल रही थी क्योंकि मैं अनुरोध दायरे में अपने लॉगर को बाध्य नहीं कर रहा था। इसलिए, यह अनुरोधों के बीच रह रहा था और HttpContext गुणों को बनाए रखने और आईआईएस से बात करने वाले लोगों पर अपवाद फेंक रहा था।

चूंकि मैं निनजेक्ट का उपयोग कर रहा हूं, यह InRequestScope() विधि को Ninject.Web.Common नेमस्पेस से, मेरे बाध्यकारी में जोड़ने का मामला था।

कम में: इस अपवाद HttpContext की पुरानी जानकारी उदाहरण के लिए फेंक दिया करने के लिए कुछ गुण, कि आईआईएस के लिए और जिसके लिए मार्शल कर रहे हैं अनुरोध अब मान्य नहीं है जब लगता है, एक्सेस किया जाता है।

आशा है कि मदद करता है!

पेज। एनएलओजी आपके द्वारा लिखे गए किसी भी लॉगर से बेहतर है। या, यदि आप बस अपवाद चाहते हैं, तो ELMAH में ड्रॉप करें।

+1

मुझे यह त्रुटि कुछ अलग स्थिति से मिली है। एक एएसएमएक्स webservice में, मेरे पास कुछ परिष्करण कार्य था, संभावित रूप से लंबे समय से चल रहा था, और मैं इसे मुख्य ऑपरेशन को धीमा किए बिना करना चाहता था। तो मैंने इसे 'टास्क.फैक्टरी.स्टार्टन्यू' के साथ चलाया। चूंकि परिष्करण कार्य को HttpContext तक कुछ पहुंच की आवश्यकता होती है, इसलिए मैंने मूर्खतापूर्वक HttpContext.Current को लैम्ब्डा से कार्य शुरू किया जिसने कार्य शुरू किया। क्रैश जब सर्वर सर्वर एक्सेस करने का प्रयास किया। –

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