2011-09-07 13 views
7

में मान्य नहीं है मैं डब्ल्यूसीएफ का उपयोग करके कुछ वेब सेवाओं से कनेक्ट करने का प्रयास कर रहा हूं लेकिन जब मुझे आवश्यक फ़ंक्शन को कॉल करने का प्रयास होता है तो मुझे एक त्रुटि मिलती है।System.InvalidOperationException: XmlSerializer विशेषता System.Xml.Serialization.XmlChoiceIdentifierAttribute आइटम

System.InvalidOperationException : XmlSerializer attribute System.Xml.Serialization.XmlChoiceIdentifierAttribute is not valid in Item. Only XmlElement, XmlArray, XmlArrayItem, XmlAnyAttribute and XmlAnyElement attributes are supported when IsWrapped is true.

से पहले ही वास्तविक सेवा को फोन करने के लिए हो जाता है और यह और भी घटित नहीं क्योंकि विधि की मैं कोशिश कर रहा हूँ है त्रुटि होता है:

यह त्रुटि मैं हो रही है कहते हैं। यह मुद्दा एक अन्य विधि के साथ है जिसे डब्ल्यूसीएफ जेनरेट क्लास में परिभाषित किया गया है।

मैं XSD में कोड का एक खंड है कि डबल्यूएसडीएल परिभाषित करने के लिए प्रयोग किया जाता है करने के लिए इस मुद्दे को पता लगाने के लिए सक्षम किया गया है:

<xs:choice minOccurs="0"> 
<xs:element name="additionalSocInd" type="tns:BinaryExpressionType"/> 
<xs:element name="skipServiceValidationInd" type="tns:BinaryExpressionType"/> 
</xs:choice> 

इसी उत्पन्न कोड:

[System.CodeDom.Compiler.GeneratedCodeAttribute("svcutil", "4.0.30319.1")] 
[System.SerializableAttribute()] [System.Xml.Serialization.XmlTypeAttribute(Namespace="http:integration.sprint.com/interfaces/manageSubscriberServices/v1/manageSubscr" + 
    "iberServices.xsd", IncludeInSchema=false)] 
public enum ItemChoiceType2 
{ 
    additionalSocInd, 
    skipServiceValidationInd, 
} 

जब मैं टिप्पणी उपरोक्त enum बाहर और इसके सभी संदर्भ, सेवा काम करता है। अन्य एक्सएस हैं: एक्सएसडी में पसंद वक्तव्य जो किसी भी समस्या का कारण नहीं लगते हैं।


अद्यतन: आगे की जांच से पता चला है कि आप निम्न है जब:

तत्व एक दृश्य तत्व के अंदर सीधे परिभाषित किया गया है:

<xs:sequence> 
<xs:element ... /> 
... 
<xs:choice minOccurs="0"> 
<xs:element name="additionalSocInd" type="tns:BinaryExpressionType" /> 
<xs:element name="skipServiceValidationInd" type="tns:BinaryExpressionType" /> 
</xs:choice> 
... 
<xs:element ... /> 
</xs:sequence> 

svcutil द्वारा उत्पन्न प्रॉक्सी त्रुटि होती है ऊपर उल्लेख किया गया।

जब इस तरह देखने के लिए बदल दिया है:

<xs:sequence> 
<xs:element ... /> 
... 
<xs:element minOccurs="0" name="myChoiceType" type="tns:MyChoiceType" /> 
... 
<xs:element ... /> 
</xs:sequence> 
<xs:complexType name="MyChoiceType"> 
<xs:choice> 
<xs:element name="additionalSocInd" type="tns:BinaryExpressionType" /> 
<xs:element name="skipServiceValidationInd" type="tns:BinaryExpressionType" /> 
</xs:choice> 
</xs:complexType> 

त्रुटि दूर चला जाता है। तो यह जेनरेटर (svcutil) उत्पन्न कोड के साथ एक बग हो सकता है।


मैं डबल्यूएसडीएल में सभी तरीकों को कॉल करना होगा, ताकि लोगों को जो काम नहीं करते बाहर टिप्पणी एक विकल्प नहीं है। और मुझे डब्लूएसडीएल को बदलने के बिना इसे काम करने की ज़रूरत है (जो क्लाइंट है, न कि हमारा)। किसी भी सहायता की सराहना की जाएगी।

+0

यह देखते हुए कि आप डबल्यूएसडीएल नहीं बदल सकते और SvcUtil सही ढंग से कि डबल्यूएसडीएल में है कि XSD पार्स नहीं होगा, यह आपके केवल यथार्थवादी विकल्प लगता है WSDL के अपने संपादित संस्करण को SvcUtil देकर क्लाइंट कोड बनाना है। यदि वह क्लाइंट कोड सेवा के साथ सही तरीके से काम करता है तो आपको डब्ल्यूएसडीएल में हर बार एक ही मैन्युअल प्रक्रिया के माध्यम से जाना होगा। मेरा अनुमान है कि यदि कोई "बग" मौजूद है, तो यह आपके क्लाइंट के डब्लूएसडीएल के एक्सएसडी में एसवीसीयूटीएल एक्सएसडी पार्सिंग तर्क की तुलना में सबसे अधिक संभावना है :) –

+0

कृपया अपने शीर्षक में "डब्ल्यूसीएफ और सी # -" जोड़ें। टैग पहले ही प्रश्न को वर्गीकृत करते हैं। –

उत्तर

7

कोशिश इन झंडे के साथ आदेश पंक्ति से प्रॉक्सी उत्पन्न करने के लिए:

svcutil /wrapped /serializer:XmlSerializer http://wsdl_url/ 
+0

धन्यवाद यारॉन!/लपेटा झंडा यह किया था। मैं वास्तव में इस पर आपकी मदद की सराहना करता हूं! – criel

+0

मैं .NET 3.5 का उपयोग कर रहा हूं, svcutil प्रलेखन उल्लेख/लपेटा गया है, लेकिन जब मैं इसका उपयोग करने की कोशिश करता हूं, तो यह कहता है/लपेटा अपरिचित है। कोई विचार? –

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