2012-06-14 9 views
7

पर काम करता है मैं निम्नलिखित ब्लॉग पोस्ट के सिद्धांतों का पालन कर रहा हूं और मुझे वह व्यवहार मिल रहा है जब मैं विजुअल स्टूडियो 2010 के वेब सर्वर में निर्मित डब्ल्यूसीएफ सेवा को डीबग करता हूं।आईआईएस 7 जेएसओएन दोषों को वापस क्यों नहीं कर रहा है? * मेरी * मशीन

http://zamd.net/2008/07/08/error-handling-with-webhttpbinding-for-ajaxjson/

जब अपने आवेदन एक FaultException() फेंकता है, मैं अपने स्थानीय मशीन पर कि गलती के JSON प्रतिनिधित्व देख सकते हैं। आवेदन उचित HttpStatusCode (इस मामले में, 401 अनधिकृत) भी देता है, जो वांछित व्यवहार है।

{"Code":"UserNotLoggedInFault","DisplayText":"You must be logged in to access this resource.","InternalText":"User is not logged in"} 

जब मैं IIS 7.0 करने के लिए अपने आवेदन को तैनात हालांकि, मैं सही HttpStatusCode मिलता है, लेकिन एचटीएमएल लौटे सामान्य पाठ है कि स्थिति कोड के साथ जुड़ा हुआ है:

आप की अनुमति नहीं है इस निर्देशिका या पेज को देखने के लिए।

क्योंकि यह स्थानीय रूप से काम कर रहा है, मुझे लगता है कि यह मुद्दा आईआईएस कॉन्फ़िगरेशन सेटिंग है। मैंने पहले ही आईआईएस को हटा दिया है: एरर पेज वैल्यू जो एरर स्टेटस को अवरुद्ध कर रहे थे (यह% SystemDrive% \ inetpub \ custerr \\ 401.htm से स्वरूपित एचटीएमएल वापस करने के लिए प्रयुक्त होता था)

क्या किसी को पता है कि आईआईएस सेटिंग्स को बदलने की जरूरत है जेएसओएन प्रतिक्रिया को पार करने की अनुमति देने के लिए जब 200 रेंज के बाहर एक HTTP स्थिति वापस आती है? ... या शायद मुझे कुछ और करने की ज़रूरत है?


अद्यतन # 1

यह केवल प्रकट होता है जब अपने आवेदन एक FaultException कि भी अनधिकृत (401) को HttpStatusCode सेट फेंकता हो रहा हो करने के लिए। यदि मेरा आवेदन 404 का स्टेटस कोड नहीं मिला है, तो JSON ठीक से वापस आ गया है।

प्रश्न अभी भी खड़ा है, लेकिन मुझे लगता है कि यह केवल 401 अनधिकृत स्थिति कोड लौटने पर लागू होता है।

यहाँ प्रतिक्रिया के कुछ स्क्रीनशॉट के रूप में चार्ल्स वेब प्रॉक्सी द्वारा कब्जा कर लिया हैं

http://imgur.com/a/MkRRI

यहाँ यह कैसा जब मैं अपने स्थानीय मशीन मारा लग रहा है

http://imgur.com/a/RMmsa


अद्यतन # 2

तो यह होता है यदि मैं सर्वर में रिमोट डेस्कटॉप करता हूं और स्थानीयहोस्ट के माध्यम से साइट पर हिट करता हूं। जब मैं अपना यूआरएल दबाता हूं जिसके लिए प्रमाणीकरण की आवश्यकता होती है, तो मुझे उचित JSON ऑब्जेक्ट वापस मिल जाता है।

http://i.imgur.com/J5oNn.png

तो क्या इसका मतलब है कि आईआईएस 401 स्थिति कोड को अलग ढंग से और गैर-प्रमाणीकृत उपयोगकर्ताओं उचित प्रतिक्रिया से बच रहे हैं व्यवहार करता है?

+0

आपकी स्थानीय होस्टिंग - आईआईएस या आईआईएस एक्सप्रेस क्या है? क्या आप सर्वर पर अन्य साइटों से प्रतिक्रिया बनने में सक्षम हैं? – Regfor

+0

स्थानीय रूप से, मैं WebDev.WebServer40.exe चला रहा हूं। मेरे विंडोज सर्वर 2008 आईआईएस 7 सर्वर पर, मैं पोस्ट कर सकता हूं और JSON ऑब्जेक्ट प्राप्त कर सकता हूं और सबकुछ बढ़िया काम करता है, सिवाय इसके कि जब मैं एक FaultException फेंक देता हूं। जब मैं इसे स्थानीय रूप से फेंकता हूं, तो मुझे JSON संरचना मिलती है। जब मैं इसे अपने विंडोज सर्वर/आईआईएस बॉक्स पर फेंकता हूं, तो मुझे "आपको इस निर्देशिका या पेज को देखने की अनुमति नहीं है।" प्रतिक्रिया। – JackAce

+0

और सर्वर से अन्य वेब ऐप्स या सेवाओं के बारे में क्या। क्या आप सर्वर से कुछ और करने के लिए सफल HTTP कॉल करने में सक्षम हैं? – Regfor

उत्तर

-1

ब्राउज़र द्वारा "आपके पास अनुमति नहीं है" उत्पन्न किया जा रहा है। मुझे लगता है कि आप ब्राउज़र में अनुरोध के जवाब देख रहे हैं; मैं आईई अनुमान लगा रहा हूँ।

आईई 401 प्रतिक्रिया के बाद आपके लिए "दोस्ताना" पृष्ठ उत्पन्न कर रहा है। आईई एक जेसन क्लाइंट नहीं है, और ऐसा लगता है कि कॉलर एक इंसान है (लगभग हमेशा सही)। तो यह एक मानव-अनुकूल पृष्ठ प्रदर्शित कर रहा है।

यदि आप उस URL को फ़िडलर के साथ या wget.exe या किसी अन्य गैर-ब्राउज़र टूल के साथ गुदगुदी करते हैं, तो आपको 401 स्थिति कोड और जेसन प्रतिक्रिया के साथ सही आउटपुट दिखाई देगा।

सुनिश्चित नहीं है कि अन्य ब्राउज़रों पर क्या होता है।

आईई में "दोस्ताना" त्रुटि पृष्ठों पर अधिक जानकारी के लिए, उन्हें बंद करने के तरीके सहित, this article from Eric Lawrence (author of Fiddler) देखें।

+1

यह * ब्राउज़र * द्वारा उत्पन्न नहीं किया जा रहा है। मैं चार्ल्स का उपयोग वेब प्रॉक्सी के रूप में कर रहा हूं और प्रतिक्रिया पाठ दिखाता है "आपको इस निर्देशिका या पृष्ठ को देखने की अनुमति नहीं है।" – JackAce

+0

चार्ल्स वेब प्रॉक्सी प्रतिक्रिया के कुछ स्क्रीनशॉट यहां दिए गए हैं http://imgur.com/a/MkRRI – JackAce

+0

मुझे नहीं पता कि चार्ल्स कैसे काम करता है। क्या आप फिडलर का उपयोग कर सकते हैं? (LIke चार्ल्स केवल यह जावा पर निर्भर नहीं है)। Wget के बारे में क्या? कर्ल? XmlHttpRequest का उपयोग कर एक jscript भी? चार्ल्स आपको क्या बता रहा है मैं दोबारा जांच करूंगा। क्या आपका आवेदन वास्तव में "आपके पास अनुमति नहीं है ..." संदेश देखता है? या आप देख रहे हैं कि केवल डायग्नोस्टिक टूल्स में आप उपयोग कर रहे हैं। अभी भी ऐसा लगता है कि टूल श्रृंखला में कुछ संदेश इंजेक्शन दिया जा रहा है, आईआईएस द्वारा नहीं। – Cheeso

6

हमें आईआईएस "त्रुटि पेज" कॉन्फ़िगरेशन में एक सेटिंग मिली जो उस व्यवहार को हल करती है।

आपको त्रुटि प्रतिक्रियाओं को "विस्तृत त्रुटियों" पर सेट करने की आवश्यकता है, डिफ़ॉल्ट "स्थानीय अनुरोधों के लिए विस्तृत त्रुटियां और दूरस्थ अनुरोधों के लिए कस्टम त्रुटि पृष्ठ" है। आप इसे अपनी वेबसाइट या सर्वर-व्यापी में सेट कर सकते हैं।

ऐसा लगता है कि यह सुविधा किसी अनधिकृत ग्राहक को अधिक जानकारी देने के बजाय 401 के लिए कस्टम त्रुटि पृष्ठ दिखाने का निर्णय लेती है।

बस यह सुनिश्चित करें कि आपकी सेवा त्रुटि प्रबंधन अपवाद को ढालता है, अन्यथा ग्राहक एक स्टैकट्रैक देख सकता है।

+0

इसने मेरे लिए एक समान समस्या हल की। मैं अमान्य अनुरोधों के लिए कुछ वर्णनात्मक जेसन के साथ 400 की स्थिति वापस करने की कोशिश कर रहा था। मेरी मशीन पर यह सर्वर पर बहुत अच्छा काम करता है, मुझे आईआईएस एचटीएमएल प्रतिक्रिया मिल जाएगी। @ हेक्टर - धन्यवाद! –

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