मैं MetadataResolver.Resolve विधि के साथ ChannelFactory का उपयोग करता हूं। क्लाइंट कॉन्फ़िगरेशन एक परेशान है, इसलिए मैं सर्वर से अपना ServiceEndpoint प्राप्त करता हूं।
जब आप ChannelFactory (T का) का उपयोग करते हैं, तो T या तो मूल अनुबंध होता है जिसे आप अपने प्रोजेक्ट या एक जनरेट अनुबंध उदाहरण से प्राप्त कर सकते हैं। कुछ परियोजनाओं में, मैंने एक सेवा संदर्भ से कोड उत्पन्न किया क्योंकि मैं अनुबंध dll का संदर्भ नहीं जोड़ सका। तुम भी सेवा संदर्भ के साथ एक 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()
मेरे अंतिम प्रोजेक्ट में, उपलब्ध बाइंडिंग की जाँच की जाती है। यदि उपलब्ध हो तो net.tcp या net.pipe का उपयोग करें। इस तरह, मैं अपनी आवश्यकताओं के लिए सर्वोत्तम उपलब्ध बंधन का उपयोग कर सकता हूं। मैं केवल इस तथ्य पर भरोसा करता हूं कि सर्वर पर मेटाडेटा समापन बिंदु मौजूद है।
आशा है कि ये आपकी मदद करेगा
BTW, यह .NET 3.5 का उपयोग करके किया जाता है। हालाँकि यह 4.0 के साथ भी काम करता है।