2011-01-18 18 views
13

WCF प्रॉक्सी बनाते समय svcutil का उपयोग कर, यह इंटरफेस के रूप में अच्छी तरह से है जहाँ से डेटा अनुबंध के वारिस शामिल करने के लिए संभव है, उदाहरण के लिए:WCF और डेटा पर इंटरफेस अनुबंध

public class SomeType: ISometype 
{ 
    public string Name { get; set; } 
} 

public interface ISometype 
{ 
    public string Name { get; set; } 
} 

जब मैं प्रॉक्सी इस का उपयोग कर बनाते हैं, कुछ टाइप प्रकार क्लाइंट पर बनाया गया है लेकिन इंटरफ़ेस नहीं बनाया गया है और कोई विरासत नहीं है। मैंने इंटरफ़ेस को डेटाकंट्रैक्ट के रूप में चिह्नित करने का प्रयास किया लेकिन उस विशेषता की अनुमति नहीं है।

यह मैं क्या करने की कोशिश कर रहा हूँ करने के लिए संभव है?

उत्तर

21

WCF धारावाहिक संदेश सेवा का उपयोग करता है, और उन सभी संदेशों को एक DataContractSerializer या का उपयोग करते हुए श्रृंखलाबद्ध जा करने के लिए सक्षम होना चाहिए एक XmlSerializer। और क्लाइंट और सर्वर के बीच जाने वाले उन संदेशों को एक्सएमएल स्कीमा में व्यक्त करने की आवश्यकता है।

अब, XML स्कीमा इंटरफेस के बारे में कुछ भी पता नहीं है - यह सब ठोस, वास्तविक प्रकार के बारे में है। एक नियमित परिदृश्य के लिए जहां आपके ग्राहक .NET से PHP तक रूबी से कुछ भी हो सकते हैं (जो भी हो), आपको क्लाइंट और सर्वर के बीच जो कुछ भी भेजना है, उसे व्यक्त करना सुनिश्चित करना है जिसे एक्सएमएल स्कीमा - इंटरफेस में प्रदर्शित किया जा सकता है नही सकता। इसलिए एक सामान्य उद्देश्य परिदृश्य में इसका समर्थन करने का कोई तरीका नहीं है।

आप तार के दोनों सिरों को नियंत्रित कर रहे हैं, जैसे कि आप दोनों क्लाइंट और सर्वर, और दोनों .NET में लिखते हैं, तो आप ऐसा कर सकते हैं:

  • सब एक अलग MyServiceContracts विधानसभा

  • में अपने DataContracts (और अपने ServiceContracts और OperationContracts और FaultContracts) डाल

    संदर्भ है कि आपके सेवा-साइड कोड, साथ ही ग्राहक दोनों से असेंबली। उस स्थिति में, जब आप क्लाइंट प्रॉक्सी बनाने के लिए जाते हैं, तो आप जिन प्रकारों का उल्लेख करते हैं वे पहले से मौजूद हैं और डब्ल्यूसीएफ खुशी से उन असेंबली से उन प्रकारों का पुन: उपयोग करेंगे। और चूंकि यह एक .NET असेंबली है जिसका आप संदर्भ दे रहे हैं, आप वहां कुछ भी कर सकते हैं जो .NET का समर्थन करता है - इंटरफेस सहित।

+0

धन्यवाद marc_s मैं इस दृष्टिकोण को आजमाउंगा। – ganeshran

+0

स्पष्टीकरण marc_s के लिए धन्यवाद, मुझे लगता है कि गणेश्रान खुद को इसी तरह के मामले पर विचार कर रहा है। लक्ष्य foo का एक उदाहरण पास नहीं करना है जो सेवा विधियों के माध्यम से सर्वर पर ISometype लागू करता है, जो मैं करना चाहता हूं वह सेवा के उपभोक्ता में ठोस निर्भरताओं से बचें; किसी अन्य परत में सभी ऑब्जेक्ट्स को दोहराने के बिना और अंतहीन मैपिंग (ऑटोमैपर या अन्यथा) है, जिस सेवा में मैं उपभोग कर रहा हूं वह सैकड़ों प्रकार और हजारों विशेषताओं में है। – RobD

2

आप ISometype को लागू करने वर्ग से विरासत और KnownType विशेषता का उपयोग क्रमबद्धता में जोड़ सकते हैं:

Can I force svcutil.exe to generate data contracts for a WCF service?

+0

धन्यवाद आर्टम, लेकिन मेरी दिलचस्पी जेनरेटेड प्रकारों को इंटरफ़ेस ISomeType को भी लागू करने में है। मुझे नहीं लगता कि ज्ञात टाइप्स उस कार्यक्षमता प्रदान करेंगे। – ganeshran

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