मैं एक एएसपी.Net WCF सेवा को कॉल करने के लिए सिल्वरलाइट क्लाइंट का उपयोग करने का प्रयास कर रहा हूं जो Dictionary<string, object>
लौटाएगा। यह ठीक काम करता है जब शब्दकोश में मूल्य int
, string
या Guid
जैसे सरल प्रकार थे।डब्ल्यूसीएफ सेवा शब्दकोश की एक सरणी लौटा रही है <string, object>
हालांकि, अब मेरे पास एक परिदृश्य है जहां मुझे Dictionary<string, object>
की सरणी होने के लिए मूल्यों में से एक की आवश्यकता है! यह सब ठीक से संकलित करता है और सेवा का हस्ताक्षर नहीं बदला है, लेकिन सेवा कॉल अब विफल हो जाती है।
कोई विचार इसे ठीक करने के लिए कैसे करें? मैं KnownType
और ServiceKnownType
विशेषताओं के साथ अपनी सेवा कक्षा और विधियों को एनोटेट करने का प्रयास कर रहा हूं लेकिन यह काम नहीं करता है।
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1
{
[OperationContract]
[ServiceKnownType(typeof(Dictionary<string, object>))]
public Dictionary<string, object> GetObject()
{
return new Dictionary<string, object>()
{
{ "pty1", 1 },
{ "pty2", Guid.NewGuid() },
{ "pty3", "blah" },
{ "pty4", new Dictionary<string, object>[]
{
new Dictionary<string, object>()
{
{ "pty1", 4 },
{ "pty2", Guid.NewGuid() },
{ "pty3", "blah" },
}
,
new Dictionary<string, object>()
{
{ "pty1", 4 },
{ "pty2", Guid.NewGuid() },
{ "pty3", "blahblah" },
}
}
}
};
}
}
अपने जवाब के लिए धन्यवाद:
यहाँ कोड का एक टुकड़ा है। मैंने डब्ल्यूसीएफ ट्रेसिंग चालू कर दी है और, जैसा कि संदिग्ध है, क्रमबद्धता के दौरान एक समस्या है। समस्या Dictionary<string, object>
का क्रमिकरण नहीं है, लेकिन Dictionary<string, object>
के Array
में से एक है।
यहां डब्ल्यूसीएफ सेवा द्वारा अपवाद अपवाद।
पैरामीटर को क्रमबद्ध करने का प्रयास करते समय एक त्रुटि हुई: GetObjectResult। इनरएक्सप्शन संदेश 'टाइप' सिस्टम था। चयन। जेनरिक.Dictionary`2 [[सिस्टम.स्ट्रिंग, mscorlib, संस्करण = 2.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = b77a5c561934e089], [System.Object, mscorlib, संस्करण = 2.0। 0.0, संस्कृति = तटस्थ, PublicKeyToken = b77a5c561934e089]] [] 'डेटा अनुबंध नाम के साथ' ArrayOfArrayOfKeyValueOfstringany टाइप: http://schemas.microsoft.com/2003/10/Serialization/Arrays 'की उम्मीद नहीं है। ज्ञात प्रकारों की सूची में स्थिर रूप से ज्ञात किसी भी प्रकार को जोड़ें - उदाहरण के लिए, KnownTypeAttribute विशेषता का उपयोग करके या उन्हें डेटाकंट्रैक्टसेरियलज़र को पास किए गए ज्ञात प्रकारों की सूची में जोड़कर। अधिक जानकारी के लिए कृपया इनरएक्सप्शन देखें।
मैंने एक नए डेटा सदस्य के साथ एक नया DataContract
कक्षा परिभाषित करने का भी प्रयास किया है, लेकिन यह एक ही त्रुटि का कारण बनता है।
इसके लिए कोड है, इसके बाद डब्ल्यूसीएफ लॉगिंग द्वारा अपवाद के बाद अपवाद।
[DataContract]
[KnownType(typeof(ObjectHolder))]
public class ObjectHolder
{
[DataMember]
public object Object { get; private set; }
public ObjectHolder(object obj)
{
this.Object = obj;
}
}
पैरामीटर क्रमानुसार करने का प्रयास करते समय एक त्रुटि थी: GetObjectResult। इनरएक्सप्शन संदेश 'टाइप' सिस्टम था। चयन। जेनरिक.Dictionary`2 [[सिस्टम.स्ट्रिंग, एमएससीआरएलआईबी, संस्करण = 2.0.0.0, संस्कृति = तटस्थ, पब्लिककेट टोकन = बी 77 ए 5 सी 561934e089], [सिल्वरलाइट एप्लिकेशंस 7.Web.ObjectHolder, SilverlightApplication7.Web, संस्करण = 1.0.0.0, संस्कृति = तटस्थ, PublicKeyToken = null]] [] 'डेटा अनुबंध नाम के साथ' ArrayOfArrayOfKeyValueOfstringObjectHolderWAwxSTlb: http://schemas.microsoft.com/2003/10/Serialization/Arrays 'की उम्मीद नहीं है। ज्ञात प्रकारों की सूची में स्थिर रूप से ज्ञात किसी भी प्रकार को जोड़ें - उदाहरण के लिए, KnownTypeAttribute विशेषता का उपयोग करके या उन्हें डेटाकंट्रैक्टसेरियलज़र को पास किए गए ज्ञात प्रकारों की सूची में जोड़कर। अधिक जानकारी के लिए कृपया इनरएक्सप्शन देखें।
फिर मैं ObjectHolder
, ObjectHolder[]
और यहां तक कि ObjectHolder[][]
के लिए ServiceKnownType
साथ खेला है के बाद से अपवाद का उल्लेख एक "ArrayOfArrayOfKeyValueOfstringObjectHolder
"।
अभी तक कोई समाधान नहीं है।
आपको क्या त्रुटि मिलती है? –
मेरा अनुमान होगा कि डब्ल्यूसीएफ को सीरियलाइजिंग ऑब्जेक्ट में परेशानी हो सकती है। यदि आप संभव हैं तो आप अपने शब्दकोशों को <स्ट्रिंग, स्ट्रिंग> बनाने का प्रयास कर सकते हैं। – sipwiz
मैं सिपविज़ से सहमत हूं, आपको डिक्शनरी को क्रमबद्ध करने में परेशानी होगी। आपको शब्दकोश में एक ऑब्जेक्ट होना चाहिए जो धारावाहिक है (जिसका अर्थ है कि आपको अपनी शब्दकोश <स्ट्रिंग, ऑब्जेक्ट> डिक्शनरी <स्ट्रिंग, विशिष्ट ऑब्जेक्ट> – srodriguez