2010-01-19 12 views
6

मैं डेल्फी 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) के नाम पर बदला जाएगा, जो फिर से एक त्रुटि उत्पन्न करेगा। मैं इस तरह से बहुत लंबे समय से संघर्ष कर रहा हूं, किसी भी विचार की सराहना की जाएगी।

इसके अलावा, मैंने एक परीक्षण सी # ऐप बनाया है जो सेवा का उपभोग करता है, और इसमें सेवा के साथ संचार करने में कोई समस्या नहीं है।

उत्तर

6

मैंने उन लोगों के साथ बात की है जिनके पास डेल्फी में क्रमबद्धता के साथ समान समस्याएं हैं, और ऐसा लगता है कि इस मुद्दे को ठीक करने के लिए कोई स्पष्ट तरीका नहीं है।

इसके बजाए, जिस समाधान के साथ मैं गया हूं, वह एक ईवेंट हैंडलर को THTTPRIO ऑब्जेक्ट की ऑनबॉयरएक्सक्यूट ईवेंट में संलग्न करना है जो एसओएपी संदेश भेजता है, जो आपको एक स्ट्रिंग के रूप में क्रमबद्ध साबुन संदेश तक पहुंच प्रदान करता है। वहां से मैंने उस समस्या को पार्स किया जो समस्या पैदा कर रहा था, और अब सबकुछ काम करता है।

एक बदसूरत समाधान का थोड़ा सा, लेकिन यह काम करता है।

+0

मैं भी एसओएपी पैकेट को बदलना समाप्त कर दिया, लेकिन मेरे मामले में लौटाई गई सूची के लिए। – mj2008

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