सबसे पहले, यह IEnumerable<T> as return type for WCF methods का डुप्लिकेट नहीं है, मुझे लगता है कि मैं समझता हूं कि डब्ल्यूसीएफ आर्किटेक्चर केवल ठोस प्रकारों को स्थानांतरित करने की अनुमति देता है जिसे एक संदेश में भर दिया जा सकता है।NetTcp बाइंडिंग डब्ल्यूसीएफ सेवा के साथ IENumerable <T> अर्थशास्त्र प्राप्त करना?
दूसरा, हमारे सेटअप तथापि नहीं एक सामान्य सेवा है, लेकिन के माध्यम से सी # + WCF + NetTcpBinding + Protobuf (केवल) कि कुछ इसलिए हम कुछ चाल के लिए अधिक स्थान हो सकता है की जरूरत है कि मालिकाना क्षुधा का एक बंडल अप जोड़ने अधिक बाध्यकारी तटस्थ होने के लिए।
तीसरा, यह न तो मेरा स्थान है और न ही यह प्रश्न एक अलग आरपीसी या मैसेजिंग फ्रेमवर्क का प्रस्ताव है।
"IEnumerable अर्थ विज्ञान", इस सवाल के प्रयोजन के लिए, कर रहे हैं:
- लौटे अनुक्रम मनमाने ढंग से बड़ा हो सकता है - इसलिए यह संभव नहीं एक
List
के अनुक्रम में परिवर्तित करने के लिए है या इसी के समान। - यह पहले से ज्ञात नहीं कितने आइटम लौटा दी जाएगी
- कोलर सिर्फ
foreach
उपयोग कर सकते हैं और इसके साथ किया जा रहा है।
एक स्थानीय विधानसभा में, एक सी # इंटरफ़ेस इस तरह मेरी नज़र:
interface IStuffProvider {
IEnumerable<Stuff> GetItems(); // may open large file or access database
}
आप एक WCF सेवा करने के लिए सीधे कि मैप नहीं कर सकते। कुछ ऐसा ही प्राप्त हो सकता है दिखाई देगा:
[ServiceContract(SessionMode = SessionMode.Required)]
interface IStuffService {
[OperationContract]
void Reset(); // may open large file or access database
[OperationContract]
List<Stuff> GetNext(); // return next batch of items (empty list if no more available)
}
बेशक, IStuffService
का उपयोग कर अधिक त्रुटि एक IStuffProvider
से ग्रस्त हो सकता है और कई उपयोग परिदृश्यों से मिश्रण करने के लिए में जोड़ना होगा ही पर दोनों सेवा और ग्राहक का उपयोग शामिल होगा मशीन, इसलिए "उपयोगकर्ता कोड" के लिए यह जानना बहुत महत्वपूर्ण नहीं होगा कि "नेटवर्क" शामिल है, उपयोगकर्ता कोड सिर्फ एक साधारण इंटरफ़ेस में रूचि रखता है।
एक विकल्प क्लाइंट साइड इंटरफ़ेस रैपर कार्यान्वयन के लिए निश्चित रूप से होगा, जो IStuffProvider
का खुलासा करता है और आंतरिक रूप से आगे बढ़ता है और IStuffService
का उपयोग करता है। हालांकि, ऐसा लगता है कि यह वास्तव में को दो इंटरफेस बनाए रखने के लिए वांछनीय होगा, एक उपयोगकर्ता कोड के लिए, एक पूरी तरह से डब्ल्यूसीएफ संचार के लिए, विशेष रूप से क्योंकि इन अनुप्रयोगों को सभी कसकर जोड़ दिया जाता है, इसलिए अतिरिक्त अमूर्तता केवल ओवरहेड लगता है।
डब्ल्यूसीएफ के साथ हमारे पास क्या विकल्प हैं?
ध्यान दें कि यह पर पढ़ने के बाद, Streamed Binding एक गरीब समाधान लगता है, के रूप में मैं अभी भी ग्राहक की ओर एक आवरण की आवश्यकता होगी और सेवा इंटरफ़ेस में कोई वास्तविक लाभ के लिए और अधिक जटिल मिलेगा मेरी मामला: मुझे अधिकतम बाइनरी स्थानांतरण दक्षता की आवश्यकता नहीं है, मुझे अच्छा कार्यान्वयन + रखरखाव दक्षता चाहिए।
शायद तुम [स्ट्रीमिंग कार्यक्षमता] (http://msdn.microsoft.com/en-us/library/ms733742 (v = vs.110) का उपयोग कर सकते हैं। एएसपीएक्स) कि provi है डब्ल्यूसीएफ द्वारा समर्पित? (मैंने थोड़ी देर के लिए डब्ल्यूसीएफ का उपयोग नहीं किया है, हालांकि, मुझे यकीन नहीं है कि यह उपयुक्त है ...) –
@AasmundEldhuset - निश्चित रूप से एक सार्थक पढ़ा। ऐसा लगता है कि बहुत सारे स्ट्रिंग संलग्न हैं। –
डब्ल्यूसीएफ इस तरह से होता है, है ना? ;-) –