दिलचस्प पोस्ट
VBA परिशुद्धता समस्या में डबल की तुलना करें सी # के डेटटाइम के समतुल्य.अब जावा में? जावा में ऑपरेटर ओवरलोडिंग Moment.js तिथि ऑब्जेक्ट को बदल देती है मैं आईबुक पर ई-रीडर प्रोग्राम को लॉन्च कैसे करूं? क्या हमेशा नर्वचर (मैक्स) का उपयोग करने के लिए कोई नुकसान? Array.sort () संख्याओं को ठीक से सॉर्ट नहीं करती मैं जासूस ++ चाहता हूं लेकिन मेरे पास विजुअल स्टूडियो नहीं है रोमन अंकों के लिए पूर्णांक परिवर्तित करना – जावा एंड्रॉइड – java.lang.SecurityException: अनुमति अस्वीकृति: शुरुआती आशय रेज़र एचटीएमएल हेल्पर एक्सटेंशन (या अन्य नामस्थानों के लिए दृश्य) नहीं मिला ओरेकल का उपयोग करके चुनें मैं साइट का बेसुरल कैसे प्राप्त कर सकता हूं? AddEventListener का उपयोग कर हेन्डलर के भीतर "यह" का मान स्ट्रिंग के लिए int परिवर्तित?

WCF ChannelFactory बनाम प्रॉक्सी बनाम

बस आप सोचते हैं कि आप WFD सेवा से एक प्रॉक्सी उत्पन्न करने के लिए किन परिस्थितियों को पसंद करेंगे, जब आप केवल चैनलफैक्चर का उपयोग कर कॉल कर सकते हैं?

इस तरह आपको प्रॉक्सी उत्पन्न करने और सर्वर को अपडेट करने पर प्रॉक्सी को पुन: उत्पन्न करने की चिंता नहीं होगी?

धन्यवाद

वेब के समाधान से एकत्रित समाधान "WCF ChannelFactory बनाम प्रॉक्सी बनाम"

एक WCF क्लाइंट बनाने के 3 बुनियादी तरीके हैं:

  1. विज़ुअल स्टूडियो को आपकी प्रॉक्सी उत्पन्न करने दें यह ऑटो उस कोड को उत्पन्न करता है जो डब्लूएसडीएल को पढ़कर सेवा से जुड़ता है। यदि सेवा किसी भी कारण से बदलती है तो आपको उसे पुन: निर्माण करना होगा इस का बड़ा फायदा यह है कि इसे स्थापित करना आसान है – वी.एस. एक जादूगर है और यह स्वचालित रूप से स्वचालित है यह नुकसान यह है कि आप वी.एस. पर भरोसा कर रहे हैं ताकि आप के लिए सभी कठोर परिश्रम करें, और आप नियंत्रण खो देते हैं।

  2. एक ज्ञात इंटरफ़ेस के साथ ChannelFactory उपयोग करें। यह आपको स्थानीय इंटरफेस रखने पर निर्भर करता है जो सेवा (सेवा अनुबंध) का वर्णन करता है। बड़ा लाभ यह है कि बदलाव को और अधिक आसानी से प्रबंधित कर सकते हैं – आपको अभी भी बदलावों को फिर से संगठित करना और ठीक करना होगा, लेकिन अब आप कोड को पुनर्जन्म नहीं कर रहे हैं, आप नए इंटरफेस को संदर्भित कर रहे हैं आम तौर पर इसका उपयोग तब किया जाता है जब आप दोनों सर्वर और क्लाइंट को नियंत्रित करते हैं क्योंकि दोनों को यूनिट परीक्षण के लिए बहुत आसानी से मॉक किया जा सकता है। हालांकि किसी भी सेवा के लिए इंटरफेस लिखे जा सकते हैं, यहां तक ​​कि आरईएस वाले भी – इस ट्विटर एपीआई पर नजर डालें

  3. अपना स्वयं का प्रॉक्सी लिखें – विशेषकर HttpClient या HttpClient का उपयोग करते हुए, खासकर आरईएस सेवाओं के लिए करना आसान है। यह आपको सबसे अच्छा अनाज नियंत्रण देता है, लेकिन बहुत सारे सर्विस एपीआई की कीमत पर स्ट्रिंग में है। उदाहरण के लिए: var content = new HttpClient().Get("http://yoursite.com/resource/id").Content; – यदि एपीआई बदल का विवरण आपको रनटाइम तक त्रुटि का सामना नहीं करेगा।

निजी तौर पर मैंने कभी विकल्प नहीं पसंद किया है 1- ऑटो उत्पन्न कोड पर भरोसा गन्दा है और बहुत अधिक नियंत्रण खो देता है इसके अलावा यह अक्सर सीरिजलाइज़ेशन मुद्दों को बनाता है – मैं दो समान वर्गों (एक सर्वर कोड में, एक ऑटो उत्पन्न) के साथ समाप्त होता है, जो एक दूसरे से छेड़ा जा सकता है लेकिन एक दर्द है।

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

मैं MetaDataResolver.Resolve विधि के साथ ChannelFactory का उपयोग करें क्लाइंट कॉन्फ़िगरेशन एक परेशान है, इसलिए मैं सर्वर से अपना सेवा प्राप्त करता हूं

जब आप ChannelFactory (टी के) का उपयोग करते हैं, टी या तो मूल अनुबंध होता है जिसे आप प्रोजेक्ट में एक संदर्भ या एक उत्पन्न अनुबंध के उदाहरण से प्राप्त कर सकते हैं। कुछ परियोजनाओं में, मैंने कोड को सेवा संदर्भ से उत्पन्न किया क्योंकि मैं अनुबंध डीएलएल के संदर्भ में नहीं जोड़ सकता था। आप सेवा संदर्भ के साथ एक asynch अनुबंध भी उत्पन्न कर सकते हैं और ChannelFactory के साथ उस अनुबंध इंटरफ़ेस का उपयोग कर सकते हैं।

मेरे लिए ChannelFactory का उपयोग करने का मुख्य बिंदु WCF क्लाइंट कॉन्फ़िगरेशन जानकारी से छुटकारा पाने के लिए था। नीचे दिए गए नमूना कोड में, आप देख सकते हैं कि कॉन्फ़िग किए बिना WCF ग्राहक कैसे प्राप्त किया जा सकता है

 Dim fixedAddress = "net.tcp://server/service.svc/mex" Dim availableBindings = MetadataResolver.Resolve(GetType(ContractAssembly.IContractName), New EndpointAddress(fixedAddress)) factoryService = New ChannelFactory(Of ContractAssembly.IContractName)(availableBindings(0)) accesService = factoryService.CreateChannel() 

मेरी अंतिम परियोजना में, उपलब्ध बांडिंग को जरूर उपलब्ध है, यदि उपलब्ध हो तो नेट। टीसीपी या नेटपोइप। इस तरह, मैं अपनी जरूरतों के लिए सर्वोत्तम उपलब्ध बंधन का उपयोग कर सकता हूं मैं इस तथ्य पर भरोसा करता हूं कि सर्वर पर एक मेटाडेटा समापन बिंदु मौजूद है।

आशा है कि ये आपकी मदद करेगा

बीटीडब्ल्यू, यह नेट 3.5 का उपयोग किया जाता है। हालांकि यह 4.0 के साथ भी काम करता है।

अच्छी तरह से ChannelFactory<T> का उपयोग करने के लिए आप सेवा और ग्राहक के बीच अनुबंध विधानसभाओं को साझा करने के लिए तैयार होना चाहिए। अगर यह आपके साथ ठीक है तो ChannelFactory<T> आपको कुछ समय बचा सकता है।

प्रॉक्सी एएसआईएनसी फ़ंक्शंस का निर्माण करेगी जिसके लिए अच्छा प्रकार है

मेरा जवाब कीथ और एंड्रयू हरे के जवाबों का एक सारांश है

यदि आप सर्वर को नियंत्रित नहीं करते हैं, लेकिन केवल WSDL / URL- दृश्य स्टूडियो या svcutil का उपयोग करते हुए प्रॉक्सी उत्पन्न करते हैं (ध्यान दें कि विज़ुअल स्टूडियो कभी-कभी असफल हो जाता है, जब स्वचैक्टिल बेहतर काम करता है)।

जब आप दोनों सर्वर और क्लाइंट को नियंत्रित करते हैं, इंटरफेस / अनुबंध साझा करते हैं और ChannelFactory को कॉल करते हैं

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

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