2009-01-29 6 views
63

मैं अपनी डब्ल्यूसीएफ विधि से एक सूची लौट रहा हूं। मेरे क्लाइंट कोड में, यह वापसी प्रकार MyObject [] के रूप में दिखाता है। मैं या तो MyObject [] या IList, या IEnumerable ...डब्ल्यूसीएफ सूची <T> की बजाय myObject [] को क्यों लौटाता है जैसा कि मैं उम्मीद कर रहा था?

WCFClient myClient = new WCFClient(); 

    MyObject[] list = myClient.GetMyStuff(); 
or 
    IList<MyObject> list = myClient.GetMyStuff(); 
or 
    IEnumerable<MyObject> list = myClient.GetMyStuff(); 

सभी मैं कर रहा हूँ इस संग्रह लेने और एक ग्रिड के लिए यह बाध्यकारी है का उपयोग करने के लिए है। मेरे लौटे हुए संग्रह को सौंपने का सबसे अच्छा उद्देश्य क्या है?

उत्तर

82

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

कारण यह है कि डब्ल्यूसीएफ जेनेरिक सूचियों को तारों को भेजने के लिए सरणी के रूप में क्रमबद्ध करता है। कॉन्फ़िगरेशन केवल एक प्रॉक्सी बनाने के लिए svcutil को बता रहा है जो उन्हें आपकी सुविधा के लिए एक सामान्य सूची में वापस परिवर्तित करता है।

+1

बनाना और तैनाती करना क्या आप इसे सेवा प्रोजेक्ट के भीतर ही कर सकते हैं, ताकि जब आप डब्ल्यूसीएफ परीक्षण क्लाइंट उत्पन्न करते हैं तो आपको TYPE [] के बजाय LIST मिलता है? –

+1

इसे svcutil से सीधे कॉन्फ़िगर करने का एक तरीका है ?, मुझे इसे svcutil द्वारा इस तरह से बनाने की आवश्यकता है क्योंकि मैं नामस्थानों के लिए एक में विभिन्न वेब सर्विसेज को क्रमबद्ध कर रहा हूं .. मैं सूची को वापस करने के लिए svcutil के साथ इसे कैसे कॉन्फ़िगर कर सकता हूं? –

2

जब आप उन्नत बटन पर क्लिक करें और आप इसे होना चाहते करने के लिए सरणी से संग्रह प्रकार बदलने के ग्राहक परियोजना के लिए सेवा संदर्भ जोड़ने ...

12

जब आप svcutil.exe का उपयोग आप ग्राहक कोड बनाने के लिए आप की जरूरत है इसे बताएं कि कुछ संदर्भों को कैसे हल किया जाए जो इसे उपलब्ध नहीं हैं।

इस तरह आप List<T> के लिए यह करना होगा:

svcutil /o:YourService.cs /ct:System.Collections.Generic.List`1 http://example.com/mex 
+1

यह एक अच्छा समाधान है, लेकिन मैं सी # के साथ सी # का उपयोग कर रहा हूं, और सामान्य सेवाओं के साथ सामान्य संग्रह प्रकारों को मैन्युअल रूप से हल करने के अतिरिक्त चरणों की आवश्यकता नहीं है। ' –

8

स्टीवर बी सही है। डब्ल्यूसीएफ वास्तव में कड़ी मेहनत की कोशिश करता है कि वह .NET के साथ न हो। आप जावा क्लाइंट को अपने घटक से कनेक्ट करने की अनुमति दे सकते हैं। Arrays interoperable हैं। जेनेरिक .NET सूचियां नहीं हैं।

हालांकि, आप अपनी खुद की प्रॉक्सी क्लास बनाने के लिए स्वागत से अधिक हैं जो सरणी को किसी सूची या किसी अन्य चीज़ में परिवर्तित कर देगा। अपने स्वयं के प्रॉक्सी बनाने के बारे में अच्छी बात यह है कि आप जो भी करते हैं उसके पूर्ण नियंत्रण में हैं।

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