2010-03-19 16 views
5

मुझे नहीं पता। मैं एक ऐप पर एक आरईएसटी सेवा से एक्सएमएल प्राप्त करने की कोशिश कर रहा हूं जिसे मैं विंडोज फोन के लिए बना रहा हूं।HttpWebRequest का उपयोग करने का प्रयास करते समय मुझे ProtocolViolationException क्यों मिल रहा है?

HttpWebResponse response = request.EndGetResponse(ar) as HttpWebResponse; 

मैं निम्नलिखित सेटअप है (गलत URL की अनदेखी, यह सिर्फ एक उदाहरण है ..) है

HttpWebRequest request = WebRequest.Create("https://domain.chargify.com/customers.xml") as HttpWebRequest; 
NetworkCredential credentials = new NetworkCredential("appkeyhere", "password"); 
request.Credentials = credentials; 
request.Method = "GET"; 
request.ContentType = "text/xml"; 
request.BeginGetResponse(new AsyncCallback(SomeCallback), request); 
... 
private void SomeCallback(IAsyncResult ar) { 
    HttpWebRequest request = ar.AsyncState as HttpWebRequest; 
    HttpWebResponse response = request.EndGetResponse(ar) as HttpWebResponse; 
    StreamReader reader = new StreamReader(response.GetResponseStream()); 
    XElement xmlResult = XElement.Parse(reader.ReadToEnd()); 
    ... 
} 

अपवाद इस प्रकार है::

मैं हमेशा निम्न पंक्ति में एक अपवाद मिल
System.Net.ProtocolViolationException was unhandled 
Message=ProtocolViolationException 
    StackTrace: 
     at System.Net.Browser.ClientHttpWebRequest.PrepareAndSendRequest(String method, Uri requestUri, Stream requestBodyStream, WebHeaderCollection headerCollection, CookieContainer cookieContainer) 
     at System.Net.Browser.ClientHttpWebRequest.BeginGetResponseImplementation() 
     at System.Net.Browser.ClientHttpWebRequest.InternalBeginGetResponse(AsyncCallback callback, Object state) 
     at System.Net.Browser.AsyncHelper.BeginOnUI(BeginMethod beginMethod, AsyncCallback callback, Object state) 
     at System.Net.Browser.ClientHttpWebRequest.BeginGetResponse(AsyncCallback callback, Object state) 
     at ChargifyWPA.MainPage.button1_Click(Object sender, RoutedEventArgs e) 
     at System.Windows.Controls.Primitives.ButtonBase.OnClick() 
     at System.Windows.Controls.Button.OnClick() 
     at System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e) 
     at System.Windows.Controls.Control.OnMouseLeftButtonUp(Control ctrl, EventArgs e) 
     at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName) 

किसी के पास कोई विचार है? यह https है, http नहीं .. क्या यह समस्या पैदा कर रहा है? धन्यवाद।

+0

के लिए रिक्त स्ट्रिंग का उपयोग करें पूर्ण अपवाद पोस्ट करें, और हमें दिखाएं कि अपवाद कहां होता है। साथ ही, कुछ कॉलबैक में, आपको ब्लॉक का उपयोग करने में अपने आईडीस्पोजेबल उदाहरण रखने की आवश्यकता है। HttpWebResponse, StreamReader और यहां तक ​​कि स्ट्रीम को सभी को 'उपयोग' ब्लॉक में होना आवश्यक है, या आप संसाधनों को रिसाव करेंगे। –

+0

मेरे प्रश्न के अपवाद को जोड़ा गया .. और मैंने "उपयोग" ब्लॉक का उपयोग करने के लिए संशोधित किया है, जो ठीक है। समस्या अभी भी होती है। – djbyter

+0

यह सुनिश्चित नहीं है कि यह अनुरोध करने के लिए सही जगह है, लेकिन क्या आप इस पोस्ट में विंडोज-फोन -7 टैग जोड़ सकते हैं? – CACuzcatlan

उत्तर

8

मेरी शर्त यह समस्या है क्योंकि आप 'ContentType' शीर्षलेख सेट कर रहे हैं, लेकिन आपके अनुरोध में सामग्री प्रदान नहीं कर रहे हैं। नोट बनाने का प्रयास करते समय प्रोटोकॉल अपवाद फेंक दिया गया है नोट करें।

शायद आप सामग्री प्रकार शीर्षलेख के बजाय 'स्वीकार करें' शीर्षलेख "टेक्स्ट/xml" पर सेट करना चाहते हैं।

+0

यह मुद्दा था। धन्यवाद पॉल। – djbyter

0

जाहिर है डेस्कटॉप पर इस त्रुटि का सबसे आम कारण इन दिनों एक वेब सर्वर है जिसके लिए टीएलएस प्रमाणीकरण की बजाय एसएसएल की आवश्यकता होती है। this article explaining troubleshooting options for various .NET 2 HTTP errors पर सभी टिप्पणियां देखें। ऐसा लगता है कि कोडप्लेक्स पर आपकी एमआईटी-लाइसेंस प्राप्त Chargify.NET प्रोजेक्ट पहले से ही using this work-around ("SecurityProtocolType.Ssl3") है।

another article circa 2008 से प्रयास करने के लिए अन्य विकल्प HTTP/1.0 पर वापस आ रहे हैं या Keep-Alive को अक्षम कर रहे हैं।

सामग्री टाइप टाइप प्रारंभ करने के लिए this answer को आजमाएं, सुनिश्चित करें।

15

यह आपकी समस्या नहीं है, लेकिन यह किसी और की मदद कर सकती है। मैं इसमें भाग गया क्योंकि मैं GET अनुरोध पर BeginGetRequestStream() को कॉल कर रहा था। बेशक, यह जरूरी नहीं है और मुझे बस BeginGetResponse() को कॉल करना चाहिए था। मूर्खतापूर्ण गलती, लेकिन अगर त्रुटि संदेश अधिक उपयोगी होता तो मैं इसे बहुत तेज़ी से समझता।

1

"ContentType" "GET" के साथ शीर्ष लेख अपवाद हैं, जबकि अनुरोध में मौजूद Azure टेबल REST API में यह हालांकि प्रमाणन शीर्ष लेख में ContentType एन्कोड करने के लिए आवश्यक है का कारण बनता है - प्राप्त के हेडर के "ContentType"

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

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