भेजते समय समर्थित मीडिया प्रकार निर्दिष्ट करें यदि कोई ग्राहक किसी असमर्थित मीडिया प्रकार में HTTP सर्वर पर डेटा भेजता है, तो सर्वर स्थिति "415 unsupported media type" के साथ उत्तर देता है। लेकिन क्लाइंट को कैसे बताया जाए कि मीडिया प्रकार किस प्रकार समर्थित हैं? क्या ऐसा करने के लिए मानक या कम से कम एक अनुशंसित तरीका है? या क्या यह सिर्फ प्रतिक्रिया शरीर को पाठ के रूप में लिखा जाएगा?"415 असमर्थित मीडिया प्रकार"
उत्तर
इस मामले में क्या करना है इसके लिए बिल्कुल कोई विनिर्देश नहीं है, इसलिए सभी जगहों पर कार्यान्वयन की उम्मीद है। (क्या समझदार होगा यदि सर्वर की प्रतिक्रिया में Accept:
हेडर की तरह कुछ शामिल था, क्योंकि वर्तमान में गलत दिशा में सही अर्थशास्त्र है, तो इसमें बहुत अधिक सही अर्थशास्त्र है।)
'स्वीकार करें' सर्वर से क्लाइंट तक हेडर जो मैं ढूंढ रहा हूं वह होगा। मैं HTTP 1.2 की प्रतीक्षा कर रहा हूं ;-) – deamon
मुझे विश्वास है कि आप इसे OPTIONS
एचटीपी क्रिया के साथ कर सकते हैं।
यदि आपका परिदृश्य एक निश्चित उपयोग केस फिट बैठता है तो 300 Multiple Choices
का स्टेटस कोड भी उपयोग किया जा सकता है। अगर वे Accept
application/xml
के शीर्षलेख के साथ अनुरोध भेजते हैं और आप केवल text/plain
का समर्थन करते हैं और यह प्रतिनिधित्व एक अलग यूआरएल पर रहता है तो आप 300 से और स्थान शीर्षलेख में उस प्रतिनिधित्व के यूआरएल का जवाब दे सकते हैं। मुझे एहसास है कि यह आपके प्रश्न को बिल्कुल ठीक नहीं कर सकता है, लेकिन यह एक और संभावित विकल्प है।
और HTTP युक्ति से:
10.4.7 406 स्वीकार्य नहीं
संसाधन अनुरोध से पहचान जिसमें भेजा स्वीकार हेडर के अनुसार स्वीकार्य नहीं सामग्री विशेषताएं हैं प्रतिक्रिया संस्थाओं पैदा करने में ही सक्षम है अनुरोध।
जब तक यह एक HEAD अनुरोध नहीं था, प्रतिक्रिया में एक इकाई शामिल होनी चाहिए जिसमें उपलब्ध इकाई विशेषताओं और स्थान (ओं) की एक सूची हो, जिसमें उपयोगकर्ता या उपयोगकर्ता एजेंट सबसे उपयुक्त चुन सकता है। इकाई प्रारूप सामग्री प्रकार प्रकार हेडर फ़ील्ड में दिए गए मीडिया प्रकार द्वारा निर्दिष्ट किया गया है। उपयोगकर्ता एजेंट के स्वरूप और क्षमताओं के आधार पर, सबसे उपयुक्त विकल्प का चयन स्वचालित रूप से किया जा सकता है। हालांकि, यह विनिर्देश ऐसे स्वचालित चयन के लिए किसी भी मानक को परिभाषित नहीं करता है।
Note: HTTP/1.1 servers are allowed to return responses which are
not acceptable according to the accept headers sent in the
request. In some cases, this may even be preferable to sending a
406 response. User agents are encouraged to inspect the headers of
an incoming response to determine if it is acceptable.
यह काम करेगा, सिवाय इसके कि वहां प्रतिक्रिया की सामग्री के लिए कोई विशिष्टता नहीं है। यह आपको बता रहा है, लेकिन आप कैसे जानते होंगे? –
लेकिन मीडिया हेडर का समर्थन करने के लिए किस हेडर का उपयोग किया जाना चाहिए? इस हेडर का उपयोग सीधे '415' प्रतिक्रिया में किया जा सकता था। आम तौर पर 'विकल्प' का उपयोग केवल यह पता लगाने के लिए किया जाता है कि किन विधियों का समर्थन किया जाता है। – deamon
'406' अप्रासंगिक है, क्योंकि यह * प्रतिक्रिया * के लिए एक प्रकार के मिलान से संबंधित है। '415' वह है जो आपको मिलता है जब सर्वर * अनुरोध * शरीर में डेटा के प्रकार को संभाल नहीं सकता है। (मैं अभी एक विकासशील webservice के संदर्भ में इस से निपट रहा हूं, मैं विकास कर रहा हूं, इसलिए मुझे यकीन है कि यह सही व्याख्या है।) समस्या यह है कि सर्वर संदेश को संभाल नहीं सकता है और क्लाइंट है पहले ही इसे भेज रहा है; त्रुटि ही एकमात्र संभावना है (और यह कहने का कोई तरीका नहीं है कि काम करने के लिए उचित मशीन-पठनीय तरीका दें)। –
पृष्ठ 81 क्रिस पर अपनी पुस्तक "HTTP डेवलपर हैंडबुक" में शिफ्टलेट बताता है कि 415 का अर्थ क्या है, और फिर वह कहता है, "HTTP प्रतिक्रिया की सामग्री में उपयोग किए जाने वाले मीडिया प्रकार को सामग्री-प्रकार इकाई शीर्षलेख में इंगित किया जाना चाहिए।"
1) तो सामग्री-प्रकार एक संभावित उत्तर है? यह संभवतः स्वीकार किए गए सामग्री प्रकारों की अल्पविराम से अलग सूची होगी। इस संभावना के साथ स्पष्ट समस्या यह है कि सामग्री-प्रकार एक इकाई शीर्षलेख है जो प्रतिक्रिया शीर्षलेख नहीं है।
2) या यह पुस्तक में एक टाइपो है? क्या वह वास्तव में "HTTP अनुरोध" कहने का मतलब था?
नहीं, नहीं। अनुरोध और प्रतिक्रियाओं के लिए "सामग्री-प्रकार" * हमेशा * संदेश के पेलोड के प्रकार की पहचान करता है (HEAD प्रतिक्रियाओं के अपवाद के साथ ...)। –
टीएल; डॉ; Microsoft.Web.Services3.WebServicesClientProtocol
** से उत्तराधिकारी के लिए उत्पन्न प्रॉक्सी क्लास संपादित किया गया।
इस त्रुटि का निवारण करते समय मैं इस प्रश्न पर आया, इसलिए मैंने सोचा कि मैं अगले व्यक्ति की मदद करूंगा जो यहां से आ सकता है, हालांकि यह सुनिश्चित नहीं है कि यह प्रश्न के उत्तर में है या नहीं। मैं इस त्रुटि में भाग गया जब किसी बिंदु पर मुझे एक मौजूदा समाधान लेना पड़ा जो डब्लूएसई और एमटीओएम एन्कोडिंग का उपयोग कर रहा था। यह एक विंडोज क्लाइंट था जो एक वेब सेवा बुला रहा था।
बिंदु पर, ग्राहक वेब सेवा को कॉल कर रहा था जहां यह उस त्रुटि को फेंक देगा। कुछ ऐसा जो मेरे लिए उस त्रुटि को हल करने में योगदान देता था वह वेब सेवा प्रॉक्सी क्लास की जांच करना था जो डिफ़ॉल्ट रूप से System.Web.Services.Protocols.SoapHttpClientProtocol
से प्राप्त करने के लिए डिफ़ॉल्ट रूप से जेनरेट किया गया था। अनिवार्य रूप से इसका मतलब था कि यह वास्तव में WSE3 का उपयोग नहीं करता था।
किसी भी तरह मैंने मैन्युअल रूप से प्रॉक्सी संपादित किया और इसे Microsoft.Web.Services3.WebServicesClientProtocol
से प्राप्त करने के लिए बदल दिया।
बीटीडब्ल्यू, वीएस में जेनरेट प्रॉक्सी क्लास देखने के लिए वेब संदर्भ पर क्लिक करें और फिर 'सभी फ़ाइलें दिखाएं' टूलबार बटन पर क्लिक करें। संदर्भ.cs खुशी का दा स्थान है!
उम्मीद है कि यह मदद करता है।
आप एक प्रतिक्रिया प्रतिक्रिया हेडर की अपेक्षा करेंगे लेकिन स्वीकृति केवल अनुरोधों के लिए उपयोग की जा सकती है। –