2009-03-19 8 views
7

जब मैं अपने ASMX प्रॉक्सी परियोजना के लिए "वेब संदर्भ जोड़ें" करने की कोशिश मैं यह त्रुटि संदेश मिल रहा है:सी # वेब सेवा में NameValueCollection का उपयोग देता है नहीं एक्सएमएल serializable त्रुटि

**"To be XML serializable, types which inherit from ICollection must have an implementation of Add(System.String) at all levels of their inheritance hierarchy. System.Collections.Specialized.NameValueCollection does not implement Add(System.String)"** 

मैं करने के लिए नाम-मान युग्म पास करनी होगी अपने वेब सेवाओं और यहाँ क्या मैं के साथ आया है:

public class FileService : System.Web.Services.WebService 
{ 

    [WebMethod] 
    public string UploadFile(byte[] incomingArray 
     , string FileName 
     , long FileLengthInBytes 
     , NameValueCollection nvcMetaData) 

अब मुझे लगता है मैं बदल रहा है मदद इस (मैं सी # और नेट ढांचे के इस हिस्से के लिए नया हूँ) की जरूरत का एहसास। अगर मैं यह काम कर सकता हूं, तो मेरी वेब सेवा को कोल्डफ्यूजन द्वारा बुलाया जाना चाहिए (अभी मैं वेब सेवा को कॉल करने के लिए .aspx पेज का उपयोग कर रहा हूं)। तो जो भी मतलब है मैं NAME-VALUE जोड़े की एक चर संख्या को पारित करने के लिए आया हूं, मुझे इसे सीएफ द्वारा कॉल करने योग्य की आवश्यकता है। अग्रिम में धन्यवाद।

उत्तर

5

एक विकल्प के रूप में, आप केवल एक साधारण नामवैल्यू वर्ग को परिभाषित कर सकते हैं और एक सरणी प्राप्त कर सकते हैं।

public class NameValue 
{ 
    public string Name{get;set;} 
    public string Value{get;set;} 
} 

[WebMethod] 
public string UploadFile(byte[] incomingArray 
    , string FileName 
    , long FileLengthInBytes 
    , NameValue[] nvcMetaData) 

यदि ग्राहक पक्ष पर आपके पास NameValueCollection है तो आप आसानी से अपने प्रकार के लिए मानचित्र कर सकते हैं। नमूना मैं इस question

+0

कोई भी मौका आप उस विचार के थोड़ा और अधिक स्केच करने के इच्छुक होंगे? –

+0

@ अज्ञात मेरे अद्यतन संस्करण की जांच करें। मुझे यकीन है कि आप और क्या जानना चाहते हैं, क्या आप अधिक विशिष्ट हो सकते हैं? आपको शायद इसे आज़माएं, जांचें कि यह कैसे काम करता है और किसी भी संदेह के साथ वापस आ जाता है - जब तक कुछ और नहीं होता? – eglasius

+0

आप सूची का भी उपयोग कर सकते हैं, और ग्राहक अभी भी NameValue [] देखेंगे। –

2

दुर्भाग्यवश सभी .NET लाइब्रेरी शब्दकोश संरचनाएं क्रमबद्ध नहीं हैं। मैंने this code के बारे में अच्छी बातें सुनी हैं - शायद इससे मदद मिलेगी।

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

+0

मैं NameValueCollection के साथ इसे लागू करने पर लटका नहीं हूं; क्या आप सरल प्रकार वाले तकनीक का सुझाव दे सकते हैं जो क्रमिक हैं? इसके अलावा, मैं एक टैग के रूप में कोल्डफ्यूजन जोड़ने के लिए भूल गया। –

+0

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

+0

कोल्डफ्यूजन टैग जोड़ा गया। – flipdoubt

-1

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

[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public object MyServiceMethod(int recordid, object data) 
{ 
    Dictionary<String, Object> noway = (Dictionary<String, Object>)data; 
    // ... 
    return noway; 

}