wcf DataContract और DataMember विशेषताओं का उपयोग कब करें?




datacontractserializer (6)

एक डेटा अनुबंध एक सेवा और एक ग्राहक के बीच एक औपचारिक समझौता है जो डेटा का आदान-प्रदान करने के लिए संक्षेप में वर्णन करता है।

डेटा अनुबंध स्पष्ट या निहित हो सकता है। सरल प्रकार जैसे int, string आदि का एक अंतर्निहित डेटा अनुबंध होता है। उपयोगकर्ता परिभाषित ऑब्जेक्ट स्पष्ट या जटिल प्रकार है, जिसके लिए आपको [DataContract] और [DataMember] विशेषता का उपयोग करके डेटा अनुबंध को परिभाषित करना होगा।

एक डेटा अनुबंध को निम्नानुसार परिभाषित किया जा सकता है:

  • यह सेवा संचालन से पास किए गए डेटा के बाहरी प्रारूप का वर्णन करता है

  • यह सेवा संदेशों में आदान-प्रदान किए गए डेटा की संरचना और प्रकार को परिभाषित करता है

  • यह एक सीएलआर प्रकार को एक्सएमएल स्कीमा में मैप करता है
  • यह परिभाषित करता है कि कैसे डेटा प्रकार serialized और deserialized हैं। क्रमबद्धता के माध्यम से, आप किसी ऑब्जेक्ट को बाइट्स के अनुक्रम में परिवर्तित करते हैं जिसे नेटवर्क पर प्रेषित किया जा सकता है। Deserialization के माध्यम से, आप किसी ऑब्जेक्ट को कॉलिंग एप्लिकेशन से प्राप्त बाइट्स के अनुक्रम से पुनः इकट्ठा करते हैं।
  • यह एक संस्करण प्रणाली है जो आपको संरचित डेटा में परिवर्तनों को प्रबंधित करने की अनुमति देती है

हमें परियोजना को शामिल करने की आवश्यकता है। रनटाइम। परियोजना के लिए क्रमिक संदर्भ। इस असेंबली में डाटाकंट्रैक्ट और डेटामेम्बर विशेषता है।

मैं डब्ल्यूसीएफ में DataContract विशेषता के बारे में बहुत उलझन में हूं। मेरे ज्ञान के अनुसार इसका उपयोग कक्षा परिभाषित प्रकार जैसे वर्गों को क्रमबद्ध करने के लिए किया जाता है। मैंने एक वर्ग लिखा जो इस तरह के ग्राहक पक्ष में उजागर हुआ।

[DataContract]
public class Contact
{
    [DataMember]
    public int Roll { get; set; }

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public string Address { get; set; }

    [DataMember]
    public int Age { get; set; }
}

यह ठीक से काम कर रहा है लेकिन जब मैं DataContract और DataMember हटाता हूं तो यह ठीक से काम करता है। मैं समझ नहीं पा रहा हूं कि यह ठीक से क्यों काम कर रहा है। क्या कोई मुझे बता सकता है कि DataContract का वास्तविक उपयोग क्या है?

मेरा सेवा अनुबंध इस तरह दिखता है

[ServiceContract]    
public interface IRestServiceImpl
{
    [OperationContract]        
    Contact XmlData(string id);      
}

चूंकि बहुत से प्रोग्रामर [DataContract] और [DataMember] विशेषताओं के साथ अभिभूत थे, .NET 3.5 SP1 के साथ, माइक्रोसॉफ्ट ने डेटा अनुबंध अनुबंध सीरियलाइज़र को सभी वर्गों को संभाला - यहां तक ​​कि इनमें से किसी भी विशेषता के बिना - पुराने एक्सएमएल सीरिएलाइज़र की तरह।

इसलिए .NET 3.5 SP1 के रूप में, आपको अब डेटा अनुबंध या डेटा सदस्य विशेषताओं को जोड़ने की आवश्यकता नहीं है - यदि आप नहीं करते हैं तो डेटा अनुबंध सीरिएलाइज़र आपके वर्ग पर सभी सार्वजनिक गुणों को क्रमबद्ध करेगा, जैसे एक्सएमएल सीरिएलाइज़र होगा।

हालांकि: उन विशेषताओं को जोड़कर, आप बहुत उपयोगी क्षमताओं को खो देते हैं:

  • बिना [DataContract] , आप अपने डेटा के लिए एक XML नामस्थान को परिभाषित नहीं कर सकते हैं
  • बिना [DataMember] , आप गैर-सार्वजनिक संपत्तियों या फ़ील्ड को क्रमबद्ध नहीं कर सकते हैं
  • बिना [DataMember] , आप [DataMember] ( Order= ) के क्रम को परिभाषित नहीं कर सकते हैं और डीसीएस सभी गुणों को क्रमबद्ध रूप से क्रमबद्ध करेगा
  • बिना [DataMember] बिना, आप अपनी संपत्ति के लिए एक अलग नाम परिभाषित नहीं कर सकते ( Name= )
  • बिना [DataMember] , आप IsRequired= या अन्य उपयोगी विशेषताओं जैसी चीज़ों को परिभाषित नहीं कर सकते हैं
  • [DataMember] बिना, आप कुछ सार्वजनिक संपत्तियों को छोड़ नहीं सकते हैं - सभी सार्वजनिक संपत्तियों को डीसीएस द्वारा क्रमबद्ध किया जाएगा

तो एक "quick'n'dirty" समाधान के लिए, [DataContract] डेटाकंट्रैक्ट [DataContract] और [DataMember] गुणों को छोड़कर काम करेगा - लेकिन यह अभी भी एक अच्छा विचार है कि उन्हें अपने डेटा वर्गों पर रखना - बस आप जो हैं उसके बारे में अधिक स्पष्ट होना कर रहे हैं, और उन सभी अतिरिक्त सुविधाओं तक पहुंचने के लिए जो आपको उनके बिना नहीं मिलते हैं ...


डब्ल्यूसीएफ के मामले में, हम संदेशों के माध्यम से सर्वर और क्लाइंट के साथ संवाद कर सकते हैं। संदेशों को स्थानांतरित करने के लिए, और सुरक्षा संभावित से, हमें एक क्रमबद्ध प्रारूप में डेटा / संदेश बनाना होगा।

डेटा को क्रमबद्ध करने के लिए हम [डेटाकंट्रैक्ट] और [डाटामबर्ग] विशेषताओं का उपयोग करते हैं। आपके मामले में यदि आप datacontract डब्ल्यूसीएफ का उपयोग कर रहे हैं तो datacontract का उपयोग करता है अन्यथा डब्ल्यूसीएफ XmlSerializer का उपयोग करता है जो डिफ़ॉल्ट क्रमबद्धता तकनीक है।

मुझे विस्तार से समझाएं:

मूल रूप से डब्ल्यूसीएफ 3 प्रकार के क्रमबद्धता का समर्थन करता है:

  1. XmlSerializer
  2. DataContractSerializer
  3. NetDataContractSerializer

XmlSerializer : - डिफ़ॉल्ट आदेश कक्षा के समान है

DataContractSerializer / NetDataContractSerializer : - डिफ़ॉल्ट क्रम वर्णानुक्रम है

XmlSerializer : - एक्सएमएल स्कीमा व्यापक है

DataContractSerializer / NetDataContractSerializer : - एक्सएमएल स्कीमा प्रतिबंधित है

XmlSerializer : - संस्करण समर्थन संभव नहीं है

DataContractSerializer / NetDataContractSerializer : - संस्करण समर्थन संभव है

XmlSerializer : - ASMX के साथ संगतता

DataContractSerializer / NetDataContractSerializer : - .NET Remoting के साथ संगतता

XmlSerializer : - XmlSerializer में विशेषता की आवश्यकता नहीं है

DataContractSerializer / NetDataContractSerializer : - इस धारावाहिक में आवश्यक विशेषता

तो आप जो भी उपयोग करते हैं वह आपकी आवश्यकताओं पर निर्भर करता है ...


साथ ही जब आप http अनुरोध से कॉल करते हैं तो यह ठीक से काम करेगा लेकिन जब आप Net.tcp से कॉल करने का प्रयास करेंगे तो उस समय आपको यह सब कुछ मिल जाएगा


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


  1. डेटा अनुबंध: यह निर्दिष्ट करता है कि आपकी इकाई वर्ग सीरियलाइजेशन प्रक्रिया के लिए तैयार है।

  2. डेटा सदस्य: यह निर्दिष्ट करता है कि विशेष क्षेत्र डेटा अनुबंध का हिस्सा है और इसे क्रमबद्ध किया जा सकता है।







datamember