मेरा आवेदन 2 "सेवाओं" है, मान लें कि एक एक बुनियादी (पूर्णांक) कैलकुलेटर है, और एक एक चल बिन्दु कैलकुलेटर है। मैं तो जैसे इंटरफेस के रूप में इन व्यक्त:डब्ल्यूसीएफ और इंटरफेस विरासत - क्या यह एक भयानक बात है?
public interface IBasicCalculator
{
int Add(int a, int b);
}
public interface IFloatingPointCalculator
{
double Add(double a, double b);
}
मैं WCF के माध्यम से इन बेनकाब करने के लिए चाहते हैं। दुर्भाग्यवश डब्ल्यूसीएफ इस धारणा से बहुत कड़े बंधे हुए प्रतीत होता है कि आप जिस संभावित ऑपरेशन का पर्दाफाश करना चाहते हैं उसे एक ही सेवा इंटरफ़ेस के माध्यम से जाना चाहिए - आप सेवाओं के बीच सत्र साझा नहीं कर सकते हैं, यह ग्राहक पक्ष से बोझिल है क्योंकि आपको एक बनाने की आवश्यकता है प्रत्येक के लिए पृथक प्रॉक्सी, कोई भी "सब-सर्विसेज" नहीं लगता है, आदि ...
तो, मैंने इकट्ठा किया है कि मुझे एक "संयुक्त" इंटरफ़ेस पेश करने की आवश्यकता है (कोई इसे भी कॉल कर सकता है एक मुखौटा), इस तरह:
[ServiceContract]
public interface ICalculatorService : IBasicCalculator, IFloatingPointCalculator
{
[OperationContract(Name = "AddInt")]
new int Add(int a, int b);
[OperationContract(Name = "AddDouble")]
new double Add(double a, double b);
}
मैं यह कर, तो WCF ग्राहक के लिए दोनों तरीकों का है, जो उन्हें कॉल कर सकते हैं को उजागर करता है, और यह सब वास्तव में काम करता है।
हालांकि, उस तरह "इंटरफेस इनहेरिट" कुरूप हो रहा है। विशेष रूप सेnew
int Add
और new
double Add
। एक विधि पर कड़ाई से बोलते हुए, new
एक अंतर्निहित विधि को छिपाने का संकेत देता है, जिसे मैं वास्तव में बिल्कुल नहीं कर रहा हूं। मैं new
छोड़ सकते हैं, लेकिन तब मैं सिर्फ संकलक चेतावनी जो राशि के लिए "मुझे लगता है मैं इस विधि छुपा रहा हूँ, आप इसे विधि का नाम बदलें या उस पर 'नए' लगाने की जरूरत है" मिलता है।
तो, यह एक 2-भाग सवाल यह है:
मेरे 'एक इंटरफ़ेस में सब कुछ गठबंधन' तर्क के साथ ट्रैक पर आई एम, या वहाँ वास्तव में बेनकाब करने के लिए "उप सेवाओं" या एक रास्ता है डब्ल्यूसीएफ का उपयोग कर "एकाधिक जुड़ी सेवाएं"?
तो यह है कि क्या किया जाना चाहिए, वहाँ एक बेहतर तरीका है?
धन्यवाद!
संयोग से, मैं अपने सभी डेटा अनुबंधों के आधार के रूप में एक मार्कर इंटरफ़ेस का उपयोग कर रहा हूं। यह मुझे सामान्य रूप से मेरे डब्ल्यूसीएफ ढांचे के भीतर डेटा अनुबंधों से निपटने की अनुमति देता है। –
मैंने अभी विज़ुअल स्टूडियो "ऐड सर्विस रेफरेंस" टूल का उपयोग किया - यह एक क्लाइंट लाइब्रेरी उत्पन्न करता है - उस लाइब्रेरी में एक प्रॉक्सी क्लास प्रति एंडपॉइंट (इसलिए एक लाइब्रेरी में कई कक्षाएं) थीं, लेकिन सभी वर्ग "प्रॉक्सी" सर्वर पर एकल ऑब्जेक्ट इसलिए इससे कोई फर्क नहीं पड़ता कि वे –
कूल हैं, इसलिए आप एक ही सेवा पर एक से अधिक सेवा अनुबंध लागू कर रहे हैं। कूल, इसका मतलब है कि आपका चिपकने वाला बिंदु प्रॉक्सी की संख्या के बारे में कभी नहीं था, लेकिन वास्तव में सेवाओं की संख्या, और अब आप जानते हैं कि आप जो वर्णन कर रहे हैं उसे पूरा करने के लिए। ठंडा। –