मैं डेल्फी 2007 में एक एप्लीकेशन लिख रहा हूं जो एक वेब सेवा का उपभोग करता है। मैंने सेवा के साथ संवाद करने के लिए आवश्यक कोड उत्पन्न करने के लिए डब्ल्यूएसडीएल आयातक का उपयोग किया, लेकिन सेवा का उपयोग करने की कोशिश करते समय मुझे "अप्रत्याशित उपखंड (तत्वनाम)" त्रुटियां मिल रही हैं।डेल्फी 2007 गलत एसओएपी संदेश उत्पन्न करता है
फ़िडलर 2 का उपयोग करना, मैंने पाया समस्या यह है कि एक xmlns सोप संदेश में भेजा मूल्यों की एक सरणी में जोड़ा जा रहा है कि:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="..." xmlns:xsd="..." xmlns:xsi="...">
<SOAP-ENV:Body>
<Request xmlns="http://service.com/theService/">
<UserName xmlns="">user</UserName>
<Password xmlns="">pass</Password>
<List xmlns="">
<Item xmlns="http://service.com/theService/">123456</Item>
<Item xmlns="http://service.com/theService/">84547</Item>
</List>
</Request>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
मैं संदेश फ़िडलर में डेल्फी द्वारा बनाई पुन: भेजने हैं , आइटम तत्वों के लिए xmlns को एक खाली स्ट्रिंग में बदलना, मुझे अब कोई त्रुटि नहीं मिलती है, और सेवा ठीक से प्रतिक्रिया देती है। अर्थात्:
InvRegistry.RegisterInvokeOptions(TypeInfo(ServicePort), ioDocument);
InvRegistry.RegisterInvokeOptions(TypeInfo(ServicePort), ioLiteral);
RemClassRegistry.RegisterSerializeOptions(RequestType, [xoLiteralParam]);
लिए:
InvRegistry.RegisterInvokeOptions(TypeInfo(ServicePort), ioDocument);
RemClassRegistry.RegisterSerializeOptions(RequestType, [xoHolderClass, xoLiteralParam]);
<List xmlns="">
<Item xmlns="">123456</Item>
<Item xmlns="">84547</Item>
</List>
अब, मैं से मेरी सेवा वर्ग के प्रारंभ का हिस्सा बदलकर xmlns से छुटकारा पाने के सूची आइटम के लिए विशेषता सक्षम हूँ
हालांकि, इसके बाद अनुरोध तत्व का नाम डिफ़ॉल्ट SOAP क्रिया (उदा। GetInformation) के नाम पर बदला जाएगा, जो फिर से एक त्रुटि उत्पन्न करेगा। मैं इस तरह से बहुत लंबे समय से संघर्ष कर रहा हूं, किसी भी विचार की सराहना की जाएगी।
इसके अलावा, मैंने एक परीक्षण सी # ऐप बनाया है जो सेवा का उपभोग करता है, और इसमें सेवा के साथ संचार करने में कोई समस्या नहीं है।
मैं भी एसओएपी पैकेट को बदलना समाप्त कर दिया, लेकिन मेरे मामले में लौटाई गई सूची के लिए। – mj2008