मैं जानना चाहता हूं कि डब्ल्यूसीएफ में ज्ञात प्रकारों को कॉन्फ़िगर कैसे करें। उदाहरण के लिए, मेरे पास व्यक्ति वर्ग और कर्मचारी कक्षा है। कर्मचारी कक्षा व्यक्ति कक्षा का एक उपन्यास है। दोनों वर्ग [DataContract]
विशेषता के साथ चिह्नित हैं।डब्ल्यूसीएफ: ज्ञात प्रकारों को कॉन्फ़िगर करना
मैं व्यक्ति वर्ग के ज्ञात प्रकार को हार्डकोड नहीं करना चाहता, जैसे कि व्यक्ति वर्ग में [ServiceKnownType(typeof(Employee))]
डालने की तरह, ताकि डब्ल्यूसीएफ को पता चले कि कर्मचारी व्यक्ति का उप-वर्ग है।
अब, मैं मेजबान के App.config निम्न XML विन्यास को जोड़ा गया:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.runtime.serialization>
<dataContractSerializer>
<declaredTypes>
<add type="Person, WCFWithNoLibrary, Version=1.0.0.0,Culture=neutral,PublicKeyToken=null">
<knownType type="Employee, WCFWithNoLibrary, Version=1.0.0.0,Culture=neutral, PublicKeyToken=null" />
</add>
</declaredTypes>
</dataContractSerializer>
</system.runtime.serialization>
<system.serviceModel>
.......
</system.serviceModel>
</configuration>
मैं संकलित यह, मेजबान चलाने के लिए, ग्राहक पर एक सेवा संदर्भ जोड़ा गया है और कुछ कोड जोड़ा गया है और ग्राहक को चलाते हैं। लेकिन कोई त्रुटि हुई: जबकि संदेश deserialize की कोशिश कर रहा
फ़ॉर्मेटर एक अपवाद दिए: deserialize पैरामीटर
http://www.herbertsabanal.net:person
का प्रयास करते समय एक त्रुटि हुई थी। InnerException संदेश 'लाइन 1 की स्थिति में यह त्रुटि थी 247. तत्व'http://www.herbertsabanal.net:person'
'http://www.herbertsabanal.net/Data:Employee'
डेटा अनुबंध के डेटा है। Deserializer के पास कोई भी प्रकार का ज्ञान नहीं है जो इस अनुबंध को पर मानचित्र करता है। प्रकार में जाना जाता है प्रकार के सूची में 'कर्मचारी' के लिए इसी जोड़ें - उदाहरण के लिए, KnownTypeAttribute विशेषता का उपयोग करके या जाना जाता प्रकार DataContractSerializer के लिए पारित की सूची में जोड़कर '।। अधिक जानकारी के लिए कृपया इनर एक्सेप्शन देखें।[DataContract(Namespace="http://www.herbertsabanal.net/Data", Name="Person")] class Person { string _name; int _age; [DataMember(Name="Name", Order=0)] public string Name { get { return _name; } set { _name = value; } } [DataMember(Name="Age", Order=1)] public int Age { get { return _age; } set { _age = value; } } } [DataContract(Namespace="http://www.herbertsabanal.net/Data", Name="Employee")] class Employee : Person { string _id; [DataMember] public string ID { get { return _id; } set { _id = value; } } }
Btw, मैं अपने सेवा के लिए वर्ग पुस्तकालयों (WCF वर्ग पुस्तकालयों या गैर WCF वर्ग पुस्तकालयों) का उपयोग नहीं किया:
नीचे डेटा अनुबंध कर रहे हैं। मैं बस मेजबान परियोजना में इसे कोडित किया।
मुझे लगता है कि कॉन्फ़िगरेशन फ़ाइल में कोई समस्या होनी चाहिए (कृपया ऊपर कॉन्फ़िगर फ़ाइल देखें)। या मुझे कुछ याद आना चाहिए। किसी भी मदद की बहुत सराहना की जाएगी।
मुझे संदेह है कि कॉन्फ़िगरेशन केवल तभी काम करता है जब किसी तृतीय-पक्ष लाइब्रेरी का उपयोग करते हुए, इसे सेवा में संदर्भित किया जाता है। मैं इसे आज़माउंगा और अगर मुझे कुछ जवाब मिल जाए तो मैं इस प्रश्न पर वापस आऊंगा। – jerbersoft