2011-06-03 12 views
5

के साथ एक प्रोटोकॉल उल्लंघनकरण अपवाद प्राप्त करना मैंने एक व्यवस्थापक उपकरण विकसित किया है जहां मैं HTML पृष्ठों को वापस करने के लिए एक सरल HTTPListener का उपयोग करता हूं। सब कुछ के साथ आईई और एफएफ अच्छी तरह से काम करता है, लेकिन जब गूगल क्रोम का उपयोग कर मैं एक ProtocolViolationException हो रही है।Google क्रोम और HTTPListener

यह सरल कोड (listener.BeginGetContext से उठाया) है कि त्रुटि पैदा करता है:

byte[] buffer = System.Text.Encoding.UTF8.GetBytes("<html><body>response sent!</body></html>"); 
context.Response.ContentLength64 = buffer.Length; 
context.Response.OutputStream.Write(buffer, 0, buffer.Length); //<-- crashes here 
context.Response.OutputStream.Close(); 
context.Response.Close(); 

अपवाद

बाइट्स धारा को लिखे जाने की सामग्री-लंबाई बाइट्स से अधिक आकार निर्दिष्ट

लाइन

context.Response.OutputStream.Write (बफर, 0, buffer.Length) से फेंक दिया जाता है;

इस त्रुटि को उत्पन्न करने के लिए क्रोम क्या करता है या नहीं करता है?

धन्यवाद

उत्तर

5

मैं जानता हूँ कि बहुत देर हो चुकी एक सा है, लेकिन मैं सिर्फ इस समस्या आई थी (क्रोम के साथ नहीं है) और इस सवाल का पाया। यह प्रतीत होता है कि बुलेट प्रूफ कोड विफल होता है जब आप एक हेड अनुरोध के जवाब में आउटपुटस्ट्रीम में कुछ लिखने का प्रयास करते हैं। ContentLength64 को तब 0 पर सेट किया जाता है, और किसी कारण से जब आप इसे बदलने का प्रयास करते हैं तो कोई अपवाद नहीं फेंक दिया जाता है, नया मान केवल चुपचाप अनदेखा किया जाता है।

+2

रिकॉर्ड के लिए, आपको हेड अनुरोध प्राप्त करते समय कम से कम प्रतिक्रिया स्ट्रीम पर कॉल करना होगा, अन्यथा आप अटक जाएंगे। – pierrecouzy

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

  • कोई संबंधित समस्या नहीं^_^