मैं अपने WPF अनुप्रयोग में एक वेब सेवा के लिए संवाद करने के लिए HttpClient कक्षा का उपयोग कर रहा हूं।सी #: एचटीपी क्लाइंट, सर्वर ने प्रोटोकॉल उल्लंघन किया। अनुभाग = ResponseStatusLine
जब मैं एक ही कनेक्शन पर लगातार जीईटी अनुरोध करता हूं, तो सब कुछ ठीक काम करता है। हालांकि, जब मैं एक ही कनेक्शन पर लगातार पुट/पैच अनुरोध करता हूं, तो पहला अनुरोध सही तरीके से निष्पादित करता है और मुझे एक प्रतिक्रिया प्राप्त होती है लेकिन दूसरे अनुरोध में अनुरोध में शरीर शामिल नहीं होता है और मुझे "प्रोटोकॉल करने वाले सर्वर" की कुख्यात त्रुटि प्राप्त होती है। उल्लंघन। खंड = प्रतिक्रिया स्थितिैटिन "।
कनेक्शन जोड़कर प्रत्येक अनुरोध के बाद मैन्युअल रूप से कनेक्शन बंद करने पर मेरे अनुरोध सफलतापूर्वक पूर्ण हो जाते हैं: शीर्षलेख पर बंद करें। यह "समाधान" एक खराब पैटर्न है और प्रदर्शन उचित पैमाने पर स्केल नहीं करेगा।
नीचे अनुरोध से मेरी टीसीपी स्ट्रीम आउटपुट की एक सूची की एक debranded संस्करण भेजा जा रहा है:
Wireshark: पालन टीसीपी स्ट्रीम आउटपुट
GET /domain/api/tenant/current/object?objectName=Lizbot HTTP/1.1
Accept: application/json
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 50
{"Data":[{"Id":123,"ObjectName":"Lizbot","Date":null}],"Errors":[]}
PATCH /domain/api/tenant/current/object/123 HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 50
{"Id":123,"ObjectName":"Lizbot","Date":null}
HTTP/1.1 204 No Content
Content-Type: application/json; charset=utf-8
{"Data":null,"Errors":[]}
PATCH /domain/api/tenant/current/object/123/otherObject HTTP/1.1
Accept: application/json
Content-Type: application/json; charset=utf-8
HTTP/1.1 400 Bad Request</b>
Content-Type: text/html; charset=us-ascii
Connection: close
Content-Length: 311
सूचना है कि दूसरी PATCH याद आ रही है ऑब्जेक्ट के साथ पैच करना चाहिए। अगर मैं पैचिंग के क्रम को बदलता हूं, तो दूसरा पैच अभी भी अपनी वस्तु खो रहा है।
यह त्रुटि कुछ ज्ञात समाधानों के साथ आम है जो मैंने कोशिश की है। उनमें this solution शामिल है जिसमें उपयोग UnsafeHeaderParsing प्रॉपर्टी को TRUE पर सेट करना और Keep-Alive प्रॉपर्टी को वेब पर FALSE पर सेट करना शामिल है। कॉनफिग। मैंने इन गुणों को नीचे दिखाए गए तरीके से सेट करने के समाधान की भी कोशिश की:
ServicePointManager.DefaultConnectionLimit = 2;
ServicePointManager.Expect100Continue = false;
इनमें से कोई भी समाधान काम नहीं करता है। यह ध्यान दिया जाना चाहिए कि इन अनुरोधों को कैप्चर करने के लिए एचटीपी डीबगिंग प्रॉक्सी टूल, फिडलर का उपयोग करते समय, मुझे कोई त्रुटि नहीं मिलती है।
तो मैं जो पूछ रहा हूं वह यह है कि अगर कोई इस त्रुटि को कम करने के लिए एक अच्छा समाधान जानता है तो मैं अद्यतन के शरीर को खोए बिना कनेक्शन में एकाधिक अनुरोध कर सकता हूं। यदि अधिक जानकारी की आवश्यकता है, तो मुझे उनकी आपूर्ति करने में खुशी होगी।
धन्यवाद! मैं इस जवाब को स्वीकार कर रहा हूं क्योंकि, हालांकि मेरा त्रुटि फेंकने से रोक देगा, यह सुनिश्चित करता है कि मुझे फेंकने में त्रुटियां नहीं हैं। –
हालांकि मैं मानता हूं कि शरीर के साथ 204 भेजना एक प्रोटोकॉल उल्लंघन है, HttpClient बिना किसी समस्या के इस स्थिति को संभाल सकता है। जैसा कि स्वयं होस्टेड वेब एपीआई हो सकता है। शायद आईआईएस गड़बड़ चीजें। –