2010-07-01 10 views
8

का उपयोग करने के लिए कहता है, मैं विजुअल स्टूडियो 2010 का उपयोग कर रहा हूं, और मुझे हमारे द्वारा बनाई गई वेब सेवा का सेवा संदर्भ मिला है। हमारे तरीकों वस्तुओं है कि जेनेरिक सूची प्रॉपर्टी हो लौट: सेवा संदर्भ सेटिंग्स परसेवा संदर्भ सूची <Type> की बजाय Arrays का उपयोग कर रहा है, भले ही सेटिंग्स का उपयोग सूची

[System.ServiceModel.MessageBodyMemberAttribute(Namespace="SomeNamespace", Order=0)] 
[System.Xml.Serialization.XmlArrayAttribute(IsNullable=true)] 
[System.Xml.Serialization.XmlArrayItemAttribute(Namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays", IsNullable=false)] 
public int[] IntValues; 

:

public class ExampleResponse 
{ 
    private System.Collections.Generic.List<int> intValues; 

    [WCF::MessageBodyMember(Name = "IntValues")] 
    public System.Collections.Generic.List<int> IntValues  
    { 
    get { return intValues; } 
    set { intValues= value; } 
    } 
} 

क्लाइंट साइड पर, यह पूर्णांक [] के बजाय की सूची के साथ एक References.cs फ़ाइल बनाता है संग्रह प्रकार सूची का उपयोग करने के लिए सेट है, Arrays नहीं। फिर भी, यह अभी भी ऐसा कर रहा है।

इसे हल करने के तरीके पर कोई भी जानकारी बेहद सहायक होगी, ऐसा कोई मतलब नहीं है।

उत्तर

9

क्या आपने "सेवा संदर्भ" या "वेब संदर्भ" जोड़ा था? ऐसा प्रतीत होता है कि प्रॉक्सी को DataContractSerializer के बजाय XmlSerializer के साथ उत्पन्न किया गया था। यदि DataContractSerializer का उपयोग किया गया था, तो आपके पास System.Runtime.Serialization ... Xml.Serialization ... गुणों के बजाय विशेषताएँ होगी। आपने इस वेब संदर्भ को वास्तव में कैसे बनाया? अद्यतन XmlSerializer सभी संग्रहों को Arrays में परिवर्तित कर देगा, जहां, डेटाकंट्रैक सीरियलाइज़र जानता है कि नेट डेटा टाइप कैसे उत्पन्न करें। वेब संदर्भ जोड़ें XmlSerializer BTW का उपयोग करता है।

इसके अलावा, मैं MessageBodyMember के आपके उपयोग के बारे में उत्सुक हूं। आप अपने स्वयं के संदेश नियंत्रण उत्पन्न करने की कोशिश क्यों कर रहे हैं। MessageContracts के साथ मेसिंग बहुत खतरनाक हो सकता है, खासकर यदि आप नहीं जानते कि आप क्या कर रहे हैं।

इसके बजाय, निम्न प्रयास करें:

[DataContract] 
public class ExampleResponse 
{ 
    private System.Collections.Generic.List<int> intValues; 

    [DataMember] 
    public System.Collections.Generic.List<int> IntValues 
    { 
     get { return intValues; } 
     set { intValues = value; } 
    } 
} 

कि कैसे आप के लिए काम करता है देखें और हमें बताएं।

+0

संदर्भ परियोजना पर राइट क्लिक करके और "सेवा संदर्भ जोड़ें ..." का चयन करके बनाया गया था। जब वेब सेवा खोजने के लिए संवाद आया, तो मैं नीचे वेब संदर्भ विकल्प नहीं चुनता। मैं आपके सुझाव के बारे में जांच करूंगा, लेकिन यह हाल ही में काम कर रहा था - यह एक वेब सेवा से है जिसे हम "विरासत में मिला" है। – Grandpappy

+1

ठीक है, समझ गया। आपकी टिप्पणी ने मुझे एक रास्ता नीचे भेजा जो मैंने पहले नहीं सोचा था। हमारे पास एक enum था जिस पर डेटाकंट्रैक्ट विशेषता नहीं थी, इसलिए वीएस -2010 मुझे बताए बिना वेब रेफरेंस बना रहा था। मैं यह भी समझता हूं कि आप अपने संदेश अनुबंधों को संभालने के बारे में क्या कहते हैं, यह बदसूरत है। – Grandpappy

+0

खुशी है कि मैं मदद कर सकता हूं। हैप्पी कोडिंग – CkH

2

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

+2

मैंने संग्रह मूल्य को सेट करके यह बिल्कुल किया है, इससे पहले कि यह संदर्भ स्वयं भी बना सके। लेकिन मुझे अभी भी Arrays मिल रहा है। – Grandpappy

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