2010-05-06 12 views
9

डब्ल्यूसीएफ पर अधिभारित विधियों को अनुकरण करने के लिए सबसे अच्छा अभ्यास क्या है?"ओवरलोडेड" विधियों के लिए डब्ल्यूसीएफ बेस्ट प्रैक्टिस

आमतौर पर मैं इस

interface IInterface 
{ 
    MyType ReadMyType(int id); 
    IEnumerable<MyType> ReadMyType(String name); 
    IEnumerable<MyType> ReadMyType(String name, int maxResults);  
} 

की तरह एक अंतरफलक में लिख सकते हैं क्या की तरह के बाद आप यह WCF में बदला इस इंटरफेस लगेगा?

+0

संभावित डुप्लिकेट [डब्ल्यूसीएफ में विधि अधिभार की अनुमति क्यों नहीं है?] (Http://stackoverflow.com/questions/10276124/why-method-overloading-is-not-allowed-in-wcf) –

उत्तर

10

यदि आप चाहें तो इसे छोड़ सकते हैं। बस ऑपरेशन कंट्रैक्ट विशेषता की नाम संपत्ति का उपयोग करें।

[ServiceContract] 
interface IInterface 
{ 
    MyType ReadMyType(int id); 
    [OperationContract(Name= "Foo")] 
    IEnumerable<MyType> ReadMyType(String name); 
    [OperationContract(Name= "Bar")] 
    IEnumerable<MyType> ReadMyType(String name, int maxResults);  
} 
+0

वह क्या होगा ऐसा लगता है कि मैं उससे परिचित नहीं हूँ? – Nate

+2

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

+0

जो सही है, यही कारण है कि सर्वोत्तम अभ्यास विधियों को विशिष्ट रूप से नामित करना और उन्हें अधिभारित नहीं करना है। कहा जा रहा है, जवाब अच्छा है, बस सबसे अच्छा अभ्यास नहीं है। :) – Chiramisu

5

जैसा कि मिविल्सन ने पहले ही कहा है - डब्ल्यूसीएफ सेवा परिभाषा (डब्लूएसडीएल) में समान नाम रखने की अनुमति नहीं देता है।

आप दो या अधिक (अतिभारित) .NET में एक ही नाम के साथ तरीकों है, तो आप उन्हें प्रत्येक विधि के लिए [OperationContract] विशेषता पर एक Name= निर्दिष्ट करके WCF सेवा परिभाषा के लिए स्पष्ट करने की जरूरत है।

याद रखें: WCF है नहीं नेट (या नहीं अकेले .net) - यह एक अंतर-संचालित मानक है, और WSDL मानक वर्तमान में विधि ओवरलोडिंग का समर्थन नहीं करता - प्रत्येक विधि विशिष्ट नाम से identifyable होना चाहिए।

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