c# - Can I inherit my WCF DataContract from a shared interface? -


मेरे पास एक ही समाधान में एक डब्ल्यूसीएफ सेवा और ग्राहक है (विभिन्न परियोजनाएं)। सेवा वर्ग स्वयं इंटरफ़ेस से प्राप्त करता है, और वह इंटरफ़ेस ग्राहक और सर्वर (एक लिंक की गई फ़ाइल के माध्यम से) के बीच साझा किया जाता है। ग्राहक एक प्रॉक्सी उत्पन्न करने के लिए एक सेवा फ़ैक्टरी का उपयोग करता है। यह क्लाइंट से सर्वर-साइड प्रोजेक्ट को संदर्भित किए बिना दो पक्षों को लिंक करने का एक बहुत ही अच्छा तरीका साबित हुआ है।

सेवा पद्धतियों में से कोई एक ऑब्जेक्ट देता है जिसमें डेटा कॉन्ट्रैक्ट और डेटामेम्बर विशेषताओं शामिल हैं, और हाल ही में वर्ग को भी ग्राहक से जोड़ा गया था, लेकिन सर्वर-साइड तर्क को संकलन प्रतीकों का उपयोग कर क्लाइंट से बाहर रखा गया था।

मैंने फैसला किया कि यह इसे एक अंतरफलक भी लेकिन अब मुझे ग्राहक से सेवा पद्धति कहा जाने वाला हर बार निम्न अपवाद मिलता है:

अंतर्निहित कनेक्शन बंद कर दिया गया था: एक कनेक्शन जो जीवित रखा जाने की उम्मीद थी, उसे बंद कर दिया गया था सर्वर।

इसकी आंतरिक अपवाद इस प्रकार है:

परिवहन कनेक्शन से डेटा पढ़ने में असमर्थ: एक मौजूदा कनेक्शन था

इसलिए सरल उदाहरण के माध्यम से, मेरी सेवा मूल रूप से ग्राहक के साथ निम्न अंतरफलक साझा करती है:

  सार्वजनिक इंटरफ़ेस आईएमआईडाटा {[डाटामेम्बर] इन्ट आईडी (get); सेट;} [डेटामेम्बर] स्ट्रिंग विवरण {get; वास्तविक वस्तु जो इंटरफ़ेस के साथ काम करती है और वापस आ जाएगी, इस तरह से कुछ दिखती है:  
  [DataContract] सार्वजनिक वर्ग MyData: IMyData { [डेटामेम्बर] सार्वजनिक इन्ट आईडी (प्राप्त करें); सेट;} [डेटामेम्बर] सार्वजनिक स्ट्रिंग विवरण {get; मेरी सेवा का इंटरफ़ेस ऐसा कुछ दिखता है:  
  [सेवा का संप्रेषण] सार्वजनिक इंटरफ़ेस आईएमआई सेवा {[ऑपरेशनकॉन्ट्रक्ट] आईएमआईडाटा गेटडाटा (); }   

कार्यान्वयन कुछ इस तरह दिखता है:

  [सेवाविवाह (ConcurrencyMode = ConcurrencyMode.Single, InstanceContextMode = InstanceContextMode.Single)] सार्वजनिक वर्ग MyService: IMyService {[ऑपरेशनकॉन्ट्रक्ट] आईएमआईडाटा GetData () {// डेटा प्राप्त करें }}   

आशा है कि सब कुछ थोड़ा सा समझ में आता है! मैं बस सोच रहा हूं कि मैं यह सब गलत कर रहा हूं। मैं सिर्फ क्लास को साझा करने और सर्वर-साइड-केवल कोड को रद्द करने के लिए वापस चला जाऊंगा अगर मुझे करना है .. लेकिन मैं एक इंटरफ़ेस का उपयोग करना चाहता हूं यदि मैं कर सकता हूं।

कोई भी विचार? DataContract पर एक इंटरफ़ेस डालने का कोई फायदा नहीं है क्योंकि वे केवल डेटा का प्रतिनिधित्व करते हैं।

ServiceContracts या एक अलग विधानसभा के साथ एक साथ रख देते हैं। यह आपके ग्राहकों को व्यावसायिक तर्क को उजागर करने से रोकेगा।

Comments