2008-12-04 16 views
9

हमारे पास एक HttpHandler है जो सीधे कस्टम क्लाइंट सॉफ़्टवेयर से HTTP पर बाइनरी पोस्ट के साथ सौदा करता है। क्लाइंट सॉफ़्टवेयर कभी-कभी डेटा भेजता है जिसके परिणामस्वरूप आईआईएस 7 में 400 - खराब अनुरोध के साथ प्रतिक्रिया होती है। चूंकि उस HTTP में "400 खराब अनुरोध" विशेष है। वाईएस पारदर्शी रूप से इसे किसी भी प्रकार के उपयोगकर्ता मोड को सूचित किए बिना कर्नेल मोड में संभालता है, एएसपी.नेट में कोई त्रुटि नहीं उठाई जाती है। क्या यह http 400 एएसपी.NET में पकड़ना संभव है, ताकि मैं इन परिदृश्यों में प्रतिक्रिया स्ट्रीम को विशिष्ट डेटा लिख ​​सकूं? किसी अन्य पृष्ठ पर रीडायरेक्ट एक विकल्प नहीं है क्योंकि इसे वर्तमान अनुरोध/प्रतिक्रिया में होना आवश्यक है।क्या एक एएसपी.NET HttpHandler एक http 400 - खराब अनुरोध संभाल सकता है?

+1

यदि यह प्रश्न "आपके पसंदीदा HTTP.SYS और http 400 चुटकुले यहां रखे" तो इसका उत्तर अब तक कम से कम 238 उत्तरदाताओं द्वारा दिया जाएगा। – cfeduke

+0

क्या आप आईआईएस 7 के एकीकृत पाइपलाइन मोड या क्लासिक मोड में चल रहे हैं? मुझे यकीन नहीं है, लेकिन आप * सब कुछ "एएसपी.NET पाइपलाइन के माध्यम से" एकीकृत मोड का उपयोग करते समय त्रुटि को देख पाएंगे। क्लासिक मोड में मुझे लगता है कि आप एसओएल हैं। लेकिन मुझे यकीन नहीं। –

उत्तर

2

आप जानते हैं कि 400 खड़ी कर रहा है, तो आप रजिस्ट्री के माध्यम से http.sys का व्यवहार अनुकूलित करने में सक्षम इससे निपटने के लिए हो सकता है:

http://support.microsoft.com/kb/820129

हालांकि, आपको पता होना चाहिए ऐसा करने की संभावित सुरक्षा और प्रदर्शन विधियां हैं।

आईआईएस से पहले एक फ़िल्टरिंग प्रॉक्सी का उपयोग करना एक और विकल्प होगा, जिससे आगे जाने से पहले अनुरोध को कैप्चर किया जा सके।

+0

त्रुटि अमान्य सामग्री लंबाई शीर्षलेख से है, जो इस के अनुसार है: http://technet.microsoft.com/en-us/library/cc786188.aspx को अनुकूलित नहीं किया जा सकता है। ऐसा लगता है कि मूल रूप से इस बिंदु पर अपना स्वयं का http सर्वर लिखने के बिना संभव नहीं हो सकता है। – duckworth

1

यदि आपका कस्टम क्लाइंट आईआईएस को HTTP 400 ट्रिगर करने का कारण बनता है, तो यह संभवतः त्रुटिपूर्ण है और मानक के अनुसार मान्य HTTP अनुरोध सबमिट नहीं कर रहा है। यदि आप ग्राहक को बदल सकते हैं, तो यह करना सही होगा। अन्यथा, आप जो काम कर रहे हैं वह HTTP नहीं है, और आईआईएस HTTP अनुरोधों को संभालने के लिए डिज़ाइन किया गया है। इसलिए, आपको अपने प्रोटोकॉल के लिए एक कस्टम सर्वर चलाया जाना चाहिए (जो एक गैर-मानक HTTP जैसी चीज है)।

इस तरह के अनुरोध को संभालने के लिए आईआईएस/एएसपी.नेट का उपयोग करने की सलाह नहीं दी जाती है क्योंकि इससे कुछ अजीब अप्रत्याशित चीजें हो सकती हैं।

+0

त्रुटि दूषित पेलोड से अमान्य सामग्री लंबाई शीर्षलेख के कारण है। क्लाइंट सॉफ़्टवेयर को बदलना एक विकल्प नहीं है और मुझे क्लाइंट को इसके पेलोड को साफ़ करने के लिए सूचित करने के लिए एक अनुकूलित http प्रतिक्रिया भेजने की आवश्यकता है, लेकिन 400 त्रुटि को फँसाने और क्लाइंट को कुछ भी भेजने का कोई तरीका नहीं है। – duckworth

+0

जो भी हो, आपको जो चाहिए वह एक सर्वर है जो गैर मानक प्रोटोकॉल (= कार्यान्वयन कीड़े के साथ मानक) को संभालता है। आपको शायद एक कस्टम सर्वर लिखना चाहिए जो इस समस्या को संभालता है। मुझे लगता है कि डेव आर का प्रॉक्सी फ़िल्टरिंग समाधान सबसे अच्छा विचार है। कोई भी समाधान एक बदसूरत हैक फिर भी है। –

2

मैं उन्हें कस्टम क्लाइंट सॉफ़्टवेयर को ठीक करने के लिए कहूंगा। असफल अनुरोध दिखाते हुए उन्हें एक रिपोर्ट दें। यदि आप सक्षम हैं, तो वायरसहार्क जैसे स्निफ़र चलाएं और उन्हें पैकेट भेजें यदि उन्हें विश्वास नहीं है कि समस्या उनके सॉफ़्टवेयर के साथ है।

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