2014-04-09 10 views
12

मैंने this और this जैसी पोस्ट देखी हैं लेकिन वे कुछ साल पुरानी हैं।क्या आप डब्ल्यूसीएफ सेवा विधि में वैकल्पिक पैरामीटर का उपयोग कर सकते हैं?

क्या मैं ऐसा कुछ कर सकता हूं?

[OperationContract] 
    [FaultContract(typeof(MyCustomFault))] 
    List<InventoryPart> SelectMany(string partialPartNumber, string division = null); 
+6

मुझे नहीं पता; क्या आप? (दूसरे शब्दों में - इसे आज़माएं) –

+6

@ टॉम डब्ल्यू - कुछ भी नहीं के लिए धन्यवाद, मैंने कोशिश की है और ऐसा लगता है लेकिन हर जगह मैंने पढ़ा है, डैनियल क्यूड्रा की सहायक (आपकी प्रतिक्रिया के विपरीत) सहित। – BBauer42

उत्तर

29

आप नहीं कर सकते। विधि हस्ताक्षर के संबंध में डब्ल्यूसीएफ पर कई प्रतिबंध हैं; मेजबान तंत्र की वजह से कुछ प्रतिबंध हैं, और अन्य डब्लूएसडीएल/एमईएक्स के कारण हैं।

इस तथ्य के बावजूद कि डब्ल्यूसीएफ संभावित रूप से आपके सेवा कोड और ओवरलोडेड विधियों और कई अन्य चीजों में डिफ़ॉल्ट पैरामीटर दे सकता है, जब आप अपनी सेवा होस्ट करते हैं तो यह शुरू हो सकता है या शुरू नहीं हो सकता है, या यह शुरू हो सकता है लेकिन काम नहीं कर सकता है या नहीं। यह युक्तियुक्त है।

मैंने इसे दूर करने के लिए क्या किया है, यह है कि मैं जहां भी आवश्यक हो वहां शून्य अक्षरों का उपयोग करता हूं, फिर मेरे क्लाइंट कोड पर मेरे पास हमेशा एक सेवा परत होती है जो मेरे स्वत: जेनरेटेड क्लाइंट प्रॉक्सी तक पहुंचती है; मेरी सेवा परत में सभी ओवरलोड और वैकल्पिक पैराम हैं जो मैं चाहता हूं। उदाहरण (गंदा कोड):

WCF सेवा:

[OperationContract] 
[FaultContract(typeof(MyCustomFault))] 
List<InventoryPart> SelectMany(string partialPartNumber, string division, int? subDivision, bool? isActive); 

ग्राहक सेवा लेयर (नहीं स्वत: जनरेट की प्रॉक्सी, लेकिन एक मेरे द्वारा लिखित)

public List<InventoryPart> GetParts(string partialPartNumber){ 
    return GetParts(partialPartNumber, null); 
} 

public List<InventoryPart> GetParts(string partialPartNumber, string division){ 
    return GetParts(partialPartNumber, division, null); 
} 

public List<InventoryPart> GetParts(string partialPartNumber, string division, int? subDivision){ 
    return GetParts(partialPartNumber, division, subDivision, null); 
} 

public List<InventoryPart> GetParts(string partialPartNumber, string division, int? subDivision, bool? isActive){ 
    // This method is the one that actually calls the client proxy channels and all. 
} 

मेरे क्लाइंट ऐप ग्राहक सेवा परत

का उपभोग करता है
+0

हर बार यह परिवर्तन करना और रखना मुश्किल है, क्योंकि जब भी आप विधि हस्ताक्षर जोड़ते/बदलते हैं, तो हमें सेवा संदर्भ को अपडेट करने की आवश्यकता हो सकती है। क्या होगा यदि व्यक्ति ने कंपनी छोड़ दी हो और एक नया डेवलपर आ जाए? –

+0

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

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

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