2012-02-03 17 views
8

के लिए सर्वश्रेष्ठ अभ्यास मैं डुप्लेक्स एसिंक कॉल के प्रदर्शन लाभ से इनकार नहीं कर सकता, लेकिन कुछ चीजें मुझे सावधान महसूस करती हैं।डब्ल्यूसीएफ डुप्लेक्स क्लाइंट

मेरी चिंता यह है कि क्लाइंट ऑब्जेक्ट को तत्काल दिया गया, क्या डब्ल्यूसीएफ यह बताने में सक्षम होगा कि कौन सा विशेष ग्राहक सेवा उदाहरण कॉलबैक तर्क प्राप्त करेगा?

क्या कोई मुझे बता सकता है कि यह एक अच्छा विचार है या नहीं? यदि नहीं, तो क्यों नहीं?

new DuplexChannelFactory<IServerWithCallback>(
    new ClientService(), 
    new NetTcpBinding(), 
    new EndpointAddress("net.tcp://localhost:1234/"+Guid.NewGuid())) 
  1. यदि उपरोक्त आभासी पथ आरक्षित है कि यह कैसे खारिज किया जा सकता है। मैं ग्राहक सेवा जीवनकाल काफी कम होना चाहता हूं। आईई एक अनुरोध करता है और एक प्रतिक्रिया प्राप्त करता है और प्राप्त करने पर, इसे मार डालो। ग्राहक सेवा जीवनकाल को पूलिंग करने और इसे ज़िंदा रखने के विरोध में प्रदर्शन दंड कितना बुरा है।

    विचार टाइमआउट समस्या से बचने का विचार है। जब प्राप्त हो रहा है, भेजना, ASAP का निपटान। सम्मेलन से - ग्राहक सेवाओं को पास नहीं कर सकता है। अगर आपको जानकारी चाहिए, तो एक नया, सरल बनाएं - जैसे ईएफ/एल 2 एस आदि

  2. डब्ल्यूसीएफ सेवा के अंदर से, मैं क्लाइंट के साथ सत्र कैसे मारूं। अर्थात। मैं नहीं चाहता कि क्लाइंट सत्र समाप्त कर रहा है - मुझे पता है कि मैं तदनुसार अपने ऑपरेशन को सजाने के लिए तैयार कर सकता हूं, लेकिन मैं चाहता हूं कि कुछ शर्तों को पूरा होने पर सेवा प्रोग्रामेटिक रूप से समाप्त हो जाए।

  3. मैं किसी भी फ़ायरवॉल मुद्दे को हल करने के लिए बंदरगाह को जोड़ सकता हूं और आगे बढ़ सकता हूं, लेकिन मुझे चिंता है कि क्या ग्राहक लोड-बैलेंसर के पीछे बैठना था। सेवा को कैसे पता चलेगा कि किस विशेष सर्वर को कॉल करना है?

उत्तर

7

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

1) सत्र पर रिलायंस सर्वर द्वारा ग्राहक श्रोता स्थापित करने के लिए:

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

2) राउटर/फ़ायरवॉल/लोडबैंसर के पीछे बैठे प्रत्येक ग्राहक के लिए, विशिष्ट पोर्ट के साथ एक नया अंत बिंदु बनाया जाना आवश्यक है। अन्यथा राउटर उचित क्लाइंट को कॉलबैक संदेशों को सही तरीके से रूट करने में सक्षम नहीं होगा। एक विकल्प है राउटर जो कस्टम प्रोग्रामिंग को किसी विशेष सर्वर के विशिष्ट पथ को पुनर्निर्देशित करने की अनुमति देता है। फिर एक लंबा आदेश। या क्लाइंट के लिए एक और तरीका कॉलबैक के साथ अपने डेटाबेस को होस्ट करने और डेटाबेस < के माध्यम से डेटा साझा करने के लिए है - कुछ परिस्थितियों में काम कर सकता है जहां लाइसेंस शुल्क कोई मुद्दा नहीं है ... लेकिन इसमें बहुत जटिलता और इतनी भारी समस्याएं शामिल हैं क्लाइंट प्लस यह एक साथ असाधारण स्थिति में स्वीकार्य हो सकता है (लेकिन कुछ असाधारण स्थिति में स्वीकार्य हो सकता है, लेकिन विशाल सेटअप लागत के शीर्ष पर नहीं)

3) यह सब मूल रूप से कहता है कि डुप्लेक्स व्यावहारिक रूप से बेकार है। यदि आपको कॉल वापस करने की आवश्यकता है तो आप क्लाइंट एंड पर एक डब्ल्यूसीएफ होस्ट सेटअप करने के लिए अच्छा प्रदर्शन करेंगे। यह आसान और अधिक स्केलेबल होगा। इसके अलावा ग्राहक और सर्वर के बीच कम युग्मन है।

स्केलेबल आर्किटेक्चर के लिए सबसे अच्छा डुप्लेक्स समाधान अंत में एक का उपयोग नहीं कर रहा है।

+2

क्या यह उत्तर NetTcp बाइंडिंग के लिए सच है या सिर्फ दोहरी एचटीपी बाध्यकारी है? – Yaniv

3
  1. यह आप कैसे कम की जरूरत है ग्राहकों तक new'd और कितनी देर तक वे तक चलेगा पर निर्भर करेगा। पूलिंग एक विकल्प नहीं होगा यदि आपको विशेष रूप से हर बार एक नए ग्राहक की आवश्यकता होती है, लेकिन यदि ग्राहक एक ही काम करते रहते हैं तो उनमें से एक पूल का उपयोग क्यों नहीं किया जा रहा है, अगर वे फिर से उसी क्लाइंट को फिर से बनाने में गलती करते हैं।

  2. वास्तविकता में कॉलबैक परिदृश्य में यदि सेवा क्लाइंट को वापस कॉल कर रही है (वास्तव में क्लाइंट पर फ़ंक्शन को कॉल कर रही है) तो जानकारी पास करने के लिए सेवा अब ग्राहक है और इसके विपरीत। आपके पास कॉलबैक बनाने वाली सेवा हो सकती है। कनेक्शन() कनेक्शन (लेकिन) जब तक जीसी इसका निपटान नहीं कर लेता है, तब तक यह खुला होगा जब तक कि मेरे अनुभव से अपेक्षाकृत अधिक समय लग सकता है। तो संक्षेप में ग्राहक को खुद को बंद करने या डिस्कनेक्ट करने के लिए जिम्मेदार होना चाहिए (क्लाइंट किसी को कॉल करने वाला व्यक्ति है), सेवा केवल जवाब वापस देनी चाहिए या ग्राहक से डेटा लेना चाहिए।

  3. डुप्लेक्स कॉलबैक में अब ग्राहक को वापस कॉल करने वाली सेवा को डुप्लेक्सचैनफैक्टरी के पीछे समेकित ग्राहक का पता मिलेगा। अगर सेवा क्लाइंट को वापस कॉल नहीं कर सकती है तो मुझे नहीं लगता कि ऐसा किया जा सकता है, आपको यह सुनिश्चित करना होगा कि आपके क्लाइंट सेवा पर कॉल कर रहे हैं, मुझे लगता है कि कॉलबैक प्राप्त करने के लिए खुला है।