2010-08-30 13 views
7

मैं ऑनलाइन देखने के लिए करने की कोशिश की है, लेकिन सभी डबल्यूएसडीएल उदाहरण वास्तव में व्याख्या नहीं करने के लिए अगर मैं डबल्यूएसडीएल या पूर्णांक में basetype स्ट्रिंग के रूप में चीजों को चिह्नित करना चाहिए लगता है ...डबल्यूएसडीएल, Enums और सी #: यह अभी भी संदिग्ध

असल में, मैं अपना डब्लूएसडीएल बनाने की कोशिश कर रहा हूं ताकि मैं एक गणना का प्रतिनिधित्व कर सकूं। मैं पहले से ही है कि मैं इसे करने के लिए मिलान करना चाहते हैं मन में एक सी # Enum है ...

public enum MyEnum { 
    Item1 = 0, 
    Item2 = 1, 
    Item3 = 2, 
    SpecialItem = 99 
} 

मुझे यकीन है कि कैसे मेरे डबल्यूएसडीएल दिखना चाहिए नहीं कर रहा हूँ ... मैं समझ यह दो में से एक है, लेकिन फिर भी मैं '100% यकीन है कि ...

<wsdl:types> 
    <xsd:schema targetNamespace="http://www.mysite.com/MyApp" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       > 
     <xsd:simpleType name="MyEnum"> 
      <xsd:restriction base="xsd:int"> 
       <xsd:enumeration value="0" /> 
       <xsd:enumeration value="1" /> 
       <xsd:enumeration value="2" /> 
       <xsd:enumeration value="99" /> 
      </xsd:restriction> 
     </xsd:simpleType> 
    </xsd:schema> 
</wsdl:types> 

या

<wsdl:types> 
    <xsd:schema targetNamespace="http://www.mysite.com/MyApp" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
       > 
     <xsd:simpleType name="MyEnum"> 
      <xsd:restriction base="xsd:string"> 
       <xsd:enumeration value="Item1" /> 
       <xsd:enumeration value="Item2" /> 
       <xsd:enumeration value="Item3" /> 
       <xsd:enumeration value="SpecialItem" /> 
      </xsd:restriction> 
     </xsd:simpleType> 
    </xsd:schema> 
</wsdl:types> 

उत्तर

9

Enumerations उनके स्ट्रिंग अभ्यावेदन की तरह लग रही खत्म हो जाएगा नहीं हूँ। तो सही wsdl रूप enums पेश करेंगे:

<xs:simpleType name="MyEnum"> 
    <xs:restriction base="xsd:string"> 
     <xs:enumeration value="Item1" /> 
     <xs:enumeration value="Item2" /> 
     <xs:enumeration value="Item3" /> 
     <xs:enumeration value="SpecialItem" /> 
    </xs:restriction> 
    </xs:simpleType> 

ऊपर स्वचालित रूप से क्रमानुसार/आप के लिए MyEnum गणना प्रकार के deserialize होगा। यदि आप ensd को ints के रूप में प्रस्तुत करते हैं: int तो आप उन्हें मैन्युअल रूप से आगे और बाद में परिवर्तित करना समाप्त कर देंगे।

तुम इतनी तरह अपने योजना के अंतर्गत गणन परिभाषा का उल्लेख कर सकते हैं:

<xsd:complexType name="Class1"> 
    <xsd:sequence> 
     <xsd:element minOccurs="1" maxOccurs="1" name="MyEnumProperty" type="MyEnum" /> 
    </xsd:sequence> 
    </xsd:complexType> 
+0

यह कैसे पता है कि मैं SpecialItem 99 बनना चाहते हो? या यह परवाह नहीं करता कि यह वास्तव में कैसे कार्यान्वित किया जाता है? असल में जब मैं एक प्रतिक्रिया संदेश बनाता हूं तो क्या मैं इसे केवल MyEnum जोड़ता हूं और यह इस तरह से क्रमबद्ध करता है कि यह enum के मूल int मान को संग्रहीत नहीं करता है, बल्कि स्ट्रिंग नाम है, इसलिए दूसरा अंत इसे नाम से प्राप्त कर सकता है आधार मूल्य का? क्या इसका कोई मतलब है? –

+0

धारावाहिक वास्तव में परवाह नहीं करता है। बस मान को MyEnum प्रकार पर सेट करना सुनिश्चित करें, पूर्णांक नहीं। इसके अलावा आपको हमेशा यह सुनिश्चित करना होगा कि MyEnum गणना के लिए आपके सर्वर-साइड और क्लाइंट-साइड परिभाषाएं समान हों, अन्यथा आपको अवांछनीय परिणाम मिलेंगे। – code4life

+0

तो मूल रूप से यह नाम (i.e. "SpecialItem") को क्रमबद्ध करता है और यह परवाह नहीं करता कि स्पेशलइटम को क्या सौंपा गया है ... लेकिन, मेरी अपनी स्पष्टता के लिए मुझे उन्हें क्लाइंट और सर्वर पर 99 दोनों असाइन करना चाहिए? क्या यह गड़बड़ हो जाएगा अगर मैंने क्लाइंट पर 100 को सौंपा और 99 सर्वर पर यह मानते हुए कि मैं इसके लिए अपने अलग प्रोग्रामिंग में खाता नहीं लेता? –

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