2009-09-15 11 views
8

मैं एक वेब सेवा है कि मैं एक enum गुजर रहा हैइंस्टेंस सत्यापन त्रुटि: '2' QueryType के लिए मान्य मान नहीं है। (वेब सेवा)

public enum QueryType { 
    Inquiry = 1 
    Maintainence = 2 
} 

जब मैं एक वस्तु है कि उस पर QueryType की एक पैरामीटर है गुजरती हैं, मैं वेब सेवा से वापस त्रुटि कह मिलती है:

'2' is not a valid value for QueryType

जब आप स्पष्ट रूप से enum की घोषणा से स्पष्ट रूप से देख सकते हैं।

मैं enum के मानों को नहीं बदल सकता क्योंकि विरासत अनुप्रयोग मानों का उपयोग करते हैं, लेकिन मुझे अपनी वेब सेवा के साथ काम करने के लिए enum के सूचकांक को धक्का देने के लिए "डिफ़ॉल्ट" मान डालना नहीं होगा। यह वेब सेवा की तरह काम करता है मूल्यों के सूचकांक का उपयोग मूल्यों के बजाय स्वयं करता है।

किसी को भी क्या मैं इसे काम करने के लिए क्या कर सकते हैं का एक सुझाव है, वहाँ कुछ मैं अपने डबल्यूएसडीएल में बदल सकते हैं?

+0

क्या आप सुनिश्चित हैं कि वेब सेवा में बाइनरी फ़ाइलें अद्यतित हैं? मैंने इस तरह की चीजें देखी हैं जब मैं एक libary प्रोजेक्ट संकलित करता हूं और डीएलएल को वेब सेवा फ़ोल्डर्स में कॉपी करना भूल जाता हूं। –

+0

नहीं, मुझे यकीन नहीं है, हालांकि मुझे पता है कि उस enum के हस्ताक्षर नहीं बदला है। क्या यह अभी भी इस मुद्दे का कारण बन सकता है? मैं सबसे अद्यतित डीएलएल के साथ वेब सेवा को अपडेट करने का प्रयास करूंगा और देख सकता हूं कि इससे कोई फर्क पड़ता है या नहीं। धन्यवाद पॉल! –

+0

पॉल, दुर्भाग्य से यह काम नहीं किया। ऐसा लगता है कि यह मूल्य –

उत्तर

7

मैं तुम्हें इस उत्तर के लिए ASMX वेब सेवाओं का उपयोग कर रहे संभालने हूँ।

आपका अनुमान सही है - एक्सएमएल Serializer डबल्यूएसडीएल में शुमार नाम का उपयोग करता है और नहीं मूल्य।

आप अपने डबल्यूएसडीएल को देखें, तो यह कुछ इस तरह दिखेगा:

<s:simpleType name="QueryType"> 
    <s:restriction base="s:string"> 
    <s:enumeration value="Inquiry" /> 
    <s:enumeration value="Maintainence" /> 
    </s:restriction> 
</s:simpleType> 


इसलिए, जब आप सेवा यह एक स्ट्रिंग गणन सदस्य का नाम है कि उम्मीद है आह्वान। जब आप .NET प्रॉक्सी का उपयोग करते हैं, तो यह रूपांतरण आमतौर पर आपके लिए संभाला जाता है। यदि सेवा को कोई मूल्य पारित किया जाता है जिसे enum मूल्य में deserialized नहीं किया जा सकता है तो आपको वह संदेश मिलेगा जो आप देख रहे हैं।

इस के आसपास पाने के लिए आपको सुनिश्चित कर सकते हैं आप इसे उम्मीद मूल्य भेजने या, कर रहे हैं कि यदि आप के लिए काम नहीं करता है, तो आप एक्सएमएल Serializer बता सकते हैं क्या आप उपयोग करना चाहते महत्व देता है।

public enum QueryType 
{ 
    [XmlEnum("1")] 
    Inquiry = 1, 
    [XmlEnum("2")] 
    Maintainence = 2 
} 


यह (WSDL से) निम्न स्कीमा टुकड़ा उत्पन्न करेगा:: आप इस XmlEnum विशेषता का उपयोग कर सकते हैं

<s:simpleType name="QueryType"> 
    <s:restriction base="s:string"> 
    <s:enumeration value="1" /> 
    <s:enumeration value="2" /> 
    </s:restriction> 
</s:simpleType> 


तो अगर आप मूल्य से गुजर रहे हैं "2" सेवा में तो इसे ठीक से deserialized किया जाना चाहिए, लेकिन आप गणना मूल्यों का अर्थ खो देते हैं।

+0

दुर्भाग्य से, यह भी मुझे मिली त्रुटि को नहीं बदला। –

+0

मैं जो काम कर रहा हूं उसके बारे में एक बेहतर कोड नमूना पोस्ट करने का प्रयास करूंगा। शायद यह कुछ डरावना है कि हम अपने डीएलएल और वेब सेवा में कर रहे हैं। –

+0

हां, कृपया एक नमूना प्रदान करें। –

2

QueryType परिभाषा को Flags() विशेषता जोड़ने का प्रयास करें।

0

कुछ विचार करने के लिए सुनिश्चित करें कि आप अपने enum मूल्यों को प्रारंभ और अपनी सूची का उपयोग किया जाएगा से पहले आइटम कल्पना नहीं बनाना है।

उदाहरण के लिए

, एक enum परिभाषित है कि इस जैसे 0 के पूर्णांक मूल्य पर शुरू नहीं करता है हो रही:

public enum EnumCategoryID 
     { 
      TOOTH_PASTE = 1, 
      TOOTH_BRUSHES = 2, 
      HOT_BEVERAGES = 3, 
      ENERGY_DRINKS = 4, 
      OVER_THE_COUNTER = 5, 
      IN_STORE = 6 
     } 

आम तौर पर जब आप अपने enum उदाहरण घोषित आप ऐसा करते हैं करने के लिए परीक्षा हो सकती हैं:

EnumCategoryID anID; //Assuming the value will be 'TOOTH_PASTE' when used 

यदि आपके द्वारा webservice के माध्यम से लौटाई गई डेटा संरचना में एक enum चर संलग्न है, तो आपको webservice के बाहर से बुलाया गया उदाहरण त्रुटि प्राप्त होगी (लेकिन यदि आप webservice के भीतर से डेटाैकलास का उपयोग करते हैं तो आपको कोई त्रुटि नहीं होगी) ।

प्वाइंट है, बस सुनिश्चित करें कि आपने अपना एनम उदाहरण शुरू किया है कि आप webservice में लौट रहे हैं।

+1

यदि आप मूल प्रश्न पर वापस देखते हैं, तो मूल्यों को प्रारंभ किया जा रहा था। एक बार यह वेब सेवा पर भेजा गया था, तो वेब सेवा मूल्यों को अनदेखा कर रही थी और वह नामों का उपयोग कर रही थी। –

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