2011-04-11 15 views
12

में मौजूदा डेटाकंट्रैक्ट में डेटामेम्बर जोड़ना मैं एस में से एक में DataMember जोड़ना चाहता हूं। मैं जानना चाहता हूं कि यदि मौजूदा पक्षों में से कोई एक अपडेट नहीं किया गया है तो मौजूदा सर्वर और क्लाइंट नए DataMember की उपस्थिति में कैसे व्यवहार करेंगे।डब्ल्यूसीएफ

मैं वहाँ याद DataMember वैकल्पिक बनाने के लिए एक तरीका है, लेकिन मुझे आश्चर्य है अगर यह सब स्थितियों में काम करेगा:

  • अद्यतन क्लाइंट => पुराने सर्वर
  • पुराने ग्राहक => अद्यतन सर्वर
  • अद्यतन क्लाइंट < = वर्ष सर्वर
  • पुराने ग्राहक < = अद्यतन सर्वर

उत्तर

15

डब्ल्यूसीएफ उन नए सदस्यों को गर्व से संभाल देगा जो इसे पहचान नहीं पाएंगे। अनुबंध का उपभोक्ता (या तो क्लाइंट या सर्वर पक्ष पर) उस सदस्य को "देख" नहीं पाएगा, इसलिए परिणाम यह है कि नया सदस्य कभी भी IsRequired=true संपत्ति नहीं होना चाहिए।

इसके अलावा, डब्ल्यूसीएफ डाटाकंट्रैक्ट IExtensibleDataObject लागू होने तक घटकों के बीच नई संपत्ति को पारदर्शी रूप से पुल करेगा। ईजी, अगर संदेश पथ जाता है:

अद्यतन ग्राहक => पुराने सर्वर => अद्यतन सर्वर

तो श्रृंखला के अंत पर अद्यतन सर्वर अभी भी नए DataMember देखेंगे। हालांकि, "पुराना सर्वर" उस नए डेटामेम्बर को नहीं देखेगा।

यदि कोई पुराना सर्वर किसी अद्यतन ग्राहक को संदेश भेजता है, तो नया डेटामेम्बर नए क्लाइंट में deserialization पर default(type) पर सेट किया जाएगा।

Best Practices for DataContract versioning here के बारे में और अधिक है।

और यह आलेख the difference between Breaking and Non-Breaking changes पर चर्चा करता है।

+0

आपके द्वारा प्रदान किए गए अंतिम लिंक से: 'ज्यादातर मामलों में, डेटा सदस्य जोड़ना या निकालना एक तोड़ना नहीं है' –