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




datacontractserializer (5)

मैं डब्ल्यूसीएफ में 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);      
}

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

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


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

विंडोज कम्युनिकेशन फाउंडेशन (डब्ल्यूसीएफ) डेटा सीरिएलाइजेशन इंजन का उपयोग करता है जिसे डाटा कॉन्ट्रैक्ट सीरियलाइजर नामक डेटा को क्रमबद्ध और deserialize करने के लिए डिफ़ॉल्ट रूप से (इसे एक्सएमएल से कनवर्ट करें) का उपयोग करता है। सभी .NET Framework आदिम प्रकार, जैसे कि पूर्णांक और स्ट्रिंग्स, साथ ही कुछ प्रकार जिन्हें प्राइमेटिव्स के रूप में माना जाता है, जैसे डेटटाइम और एक्सएमएलएमेंट, को किसी भी अन्य तैयारी के साथ क्रमबद्ध किया जा सकता है और इसे डिफ़ॉल्ट डेटा अनुबंध माना जाता है। कई .NET Framework प्रकारों में मौजूदा डेटा अनुबंध भी हैं।

आप here. पूरा लेख पा सकते हैं here.


चूंकि बहुत से प्रोग्रामर [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 से कॉल करने का प्रयास करेंगे तो उस समय आपको यह सब कुछ मिल जाएगा





datamember