2008-09-30 13 views
6

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

इकाइयों themselve सभी डेटाकंट्रैक्ट-विशेषता और इसके सदस्यों datamember विशेषताओं के साथ सजाए गए हैं।

क्या यह संभव है? शायद NetDataContractSerializer के साथ? मुझे पता है कि मैं इसे बेस क्लास (कुछ अमूर्त वर्ग उदा।) और ज्ञात टाइप-सामग्री का उपयोग कर सकता हूं लेकिन मैं निश्चित रूप से इंटरफ़ेस को ऑब्जेक्ट्स के पहचानकर्ता के रूप में पसंद करता हूं क्योंकि इसका उपयोग क्लाइंट ऐप में व्यापक रूप से किया जाता है और आसानी से विकास।

धन्यवाद

उत्तर

6

मैंने ऑपरेशन कॉन्ट्रैक्ट्स के कार्यान्वयन पर ServiceKnownType विशेषता का उपयोग कर समस्या हल की।

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

1

यह निश्चित रूप से नियमित "मेक्स" के तहत संभव नहीं है। यह हो सकता है असेंबली साझाकरण के साथ संभव हो, लेकिन मैं वास्तव में इसकी अनुशंसा नहीं करता - आप डब्ल्यूसीएफ से लड़ रहे हैं: यह भंगुर होगा। बेशक, आप हमेशा इसे अपने ऑब्जेक्ट मॉडल में मास्क कर सकते हैं - यानी [ ऑपरेशन कंट्रैक्ट] विधि सीधे, इसे एक रैपर विधि में अमूर्त करें जो डब्ल्यूसीएफ विवरण छुपाता है (संभवतः डेटा ट्रांसफर के लिए अलग-अलग ऑब्जेक्ट्स का उपयोग करके यह वास्तव में लौटाता है)।

0

[मैंने अभी आपका जवाब पढ़ा है और महसूस किया है कि आप विशेष रूप से सेवा विधियों के पैरामीटर के बारे में पूछ रहे थे। मैं मामले में यहाँ मेरी टिप्पणी छोड़ देंगे वे अभी भी उपयोगी रहे हैं]

मैं परियोजनाओं मैं कहाँ जानता हूँ कि मैं तार के दोनों किनारों पर WCF है पर क्या किया है, है कुछ की तरह:।

एक पुस्तकालय का ही साझा इंटरफेस, जैसे:

namespace SharedInterfaces { 
    public interface ICompositeType { 
     bool BoolValue { get; set; } 
     string StringValue { get; set; } 
    } 
} 

WCF सेवा पुस्तकालय है, जहां [DataContract] के (Pocos) साझा इंटरफेस को लागू।

[DataContract] 
public class CompositeType : ICompositeType { 
    bool boolValue = true; 
    string stringValue = "Hello "; 

    [DataMember] 
    public bool BoolValue { 
     get { return boolValue; } 
     set { boolValue = value; } 
    } 

    [DataMember] 
    public string StringValue { 
     get { return stringValue; } 
     set { stringValue = value; } 
    } 
} 

सेवा ग्राहक, प्रत्येक प्रॉक्सी POCO "मजबूर" किया जा सकता है साझा, तैनात, एक आंशिक वर्ग का उपयोग कर इंटरफ़ेस को लागू करने के लिए (यह होगा वैसे भी अगर svcutil किया यह काम सही ढंग से है), और आप में सक्षम हो जाएगा अपने ग्राहक कोड के बाकी हिस्सों में इंटरफ़ेस के लिए कार्यक्रम:।

namespace ServiceClient.ServiceReference1 { 
    public partial class CompositeType : ICompositeType { 
    } 
} 

यह आंशिक आपको कुछ अतिरिक्त गुण या तरीकों कि ग्राहक में (जैसे प्रस्तुतकर्ता या ViewModel अवधारणाओं का उपयोग कर सकते जोड़ना चाहते हैं तो उसके लिए भी उपयोगी एमवीपी या एमवीवीएम पैटर्न)।

+0

+1 सेवा क्लाइंट में, प्रत्येक प्रॉक्सी पीओसीओ को आंशिक वर्ग का उपयोग करके साझा, तैनात, इंटरफेस को लागू करने के लिए "मजबूर" किया जा सकता है। –

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