2009-11-20 16 views
11

क्या डब्ल्यूसीएफ सेवाओं के साथ रिटर्न प्रकार के रूप में structs का उपयोग करने पर कोई आधिकारिक सिफारिश है?डब्ल्यूसीएफ सेवाओं के साथ स्ट्रक्चर का उपयोग

मैं वर्तमान में एक ऐसी सेवा के साथ बातचीत कर रहा हूं जिसे मैंने नहीं लिखा था और खुद को यह देखने के लिए प्रेरित किया कि मेरी परेशानी जरूरी है या नहीं।

मैंने पहले भी किया है हमेशा इस्तेमाल किया कक्षाओं - शायद भाग में क्या नमूने हमेशा दिखाने के है, क्योंकि है कि लेकिन जैसा कि मैंने इसके बारे में अब लगता है, अन्य "सहज" कारणों के लिए:

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

  • मैं LINQ का बहुत उपयोग करता हूं, इसलिए शून्यता के लिए परीक्षण संदर्भ प्रकारों के साथ निहित हैं जबकि structs और अन्य मान प्रकारों के साथ मुझे हमेशा शून्य करने की आवश्यकता होती है।

वे कुछ ऐसे हैं जो तुरंत मेरे पास आते हैं हालांकि मैं स्वीकार करता हूं कि यह मेरे दिमाग में बुलेट सूची से अधिक सहज है। मैं जब वापसी मान के साथ काम कर लिखने के लिए सवाल पूछने के लिए है क्योंकि मैं एक सेवा है जो structs रिटर्न के साथ काम कर रहा हूँ और होने सोचा:

var foo = Bar.Value; 
+0

@ डेविड: कुछ अतिरिक्त विचारों के साथ मेरा उत्तर अपडेट किया गया –

उत्तर

17

की

var foo = Bar.Value.MyField; 

बजाय आप एक struct बना सकते हैं और [DataContract] पर विशेषता दें - आगे बढ़ें और इसका उपयोग करें! डब्लूसीएफ के लिए, इससे कोई फर्क नहीं पड़ता - डब्ल्यूसीएफ केवल तभी आवश्यक होता है कि डेटाकंट्रैक्ट विशेषता के साथ चिह्नित किए गए वर्ग या संरचना को क्रमबद्ध संदेश में शामिल करने के लिए सभी क्षेत्रों को [DataMember] विशेषता के साथ चिह्नित किया जाना चाहिए।

आप DataContractAttribute पर MSDN डॉक्स चेक करते हैं, यह पता चलता है कि आप के साथ ही एक struct पर इसका इस्तेमाल कर सकते हैं: (के लिए के रूप में जब एक वर्ग के बजाय एक struct उपयोग करने के लिए सामान्य रूप में:

[AttributeUsageAttribute(AttributeTargets.Class| 
AttributeTargets.Struct|AttributeTargets.Enum, 
Inherited = false, AllowMultiple = false)] 
public sealed class DataContractAttribute : Attribute 

अद्यतन ,

When should I use a struct instead of a class?

लेकिन जब से WCF संदेश गुजर के बारे में वास्तव में है (यानी अपने ग्राहक एक विधि कॉल, कि कॉल करता है और उसके मानदंड एक धारावाहिक संदेश में बदल:, .NET में), यह तो यहाँ प्रश्न देखें वह सीन हो जाता है तार के पार टी और फिर दूसरे छोर पर फिर से इकट्ठा हो गया और एक विधि कॉल में वापस आ गया), मुझे struct का उपयोग करने के लिए कोई अनिवार्य कारण नहीं दिख रहा है।

सामान्य .NET के सभी लाभ वास्तव में डब्ल्यूसीएफ की एसओए-दुनिया में लागू नहीं होते हैं, मैं कहूंगा (आप कक्षा या संरचना के उदाहरणों के आसपास नहीं जा रहे हैं - ऊपर देखें)।

+0

मेरा प्रश्न इस बारे में कम था कि यह किया जा सकता है और जब उचित हो तो संदर्भ के लिए अधिक खोज रहे थे। – t3rse

+0

पहली बार मुझे डीटीओ के लिए structs का उपयोग करने का कारण दिखाई देता है: जीसी पर कम दबाव, जब डीटीओ का जीवन बहुत छोटा होता है और उदाहरण रेफ प्रकार के कई लाभ एकत्र नहीं कर सकता है। लेकिन यह डब्ल्यूसीएफ आंतरिक पर निर्भर करता है। –

संबंधित मुद्दे