2008-11-19 11 views

उत्तर

5

विजुअल स्टूडियो का आप किस संस्करण का उपयोग कर रहे हैं?

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

आप जो कुछ हासिल करना चाहते हैं उसके बारे में कुछ और जानकारी प्रदान करने के लिए आप अपने प्रश्न का विस्तार करना चाह सकते हैं।

4

svcutil.exe उपकरण (और VS2008 में बराबर कार्यक्षमता) आम तौर पर इस तरह इस्तेमाल कर रहे हैं: -

आप एक सेवा विवरण (एक WSDL दस्तावेज़) पर यह बात और यह क्लाइंट-साइड कोड और करने के लिए config उत्पन्न करता है आपको एक ग्राहक बनाने में मदद करता है जो डब्लूएसडीएल में वर्णित सेवाओं के साथ संवाद कर सकता है। उपकरण अन्य चीजें भी कर सकते हैं, लेकिन यही वह है जिसका उपयोग अक्सर किया जाता है। मुझे लगता है कि यह svcutil.exe का उपयोग है जिसका आप उल्लेख कर रहे हैं।

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

यदि आप डब्ल्यूसीएफ का उपयोग कर क्लाइंट और सेवा लिख ​​रहे हैं, तो इसका कोई कारण नहीं है कि आप svcutil.exe का उपयोग क्यों करेंगे। जब आप अपना [ServiceContract] परिभाषित करते हैं तो आप क्लाइंट और सेवा दोनों में उसी परिभाषा का उपयोग कर सकते हैं। जब आप अपनी सेवा कॉन्फ़िगरेशन फ़ाइल बनाते हैं तो क्लाइंट कॉन्फ़िगरेशन फ़ाइल बनाने के लिए यह एक साधारण काम है - अधिकांश सामग्री समान है।

अंत में, svcutil.exe द्वारा उत्पन्न सभी कोड/कॉन्फ़िगरेशन का अर्थ यह समझने के लिए कोई विकल्प नहीं है। फिर आप इसके बिना काम करने की स्थिति में होंगे।

7

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

एक बार जब आप संदर्भ है, तो आप एक WCF ग्राहक बनाने के लिए निम्नलिखित कोड का उपयोग कर सकता:

var factory = new ChannelFactory<IMyWcfService>(); 
var wcfClient = factory.CreateChannel(); 
bool closedSuccessfully = false; 

try 
{ 
    // Now you can make calls on the wcfClient object 
    ((ICommunicationObject)wcfClient).Close(); 
    closedSuccessfully = true; 
} 
finally 
{ 
    if (!closedSuccessfully) 
    { 
     ((ICommunicationObject)wcfClient).Abort(); 
    } 
} 

नोट सफाई दिनचर्या। आप wcfClient चर को साफ़ करने के लिए विश्वसनीय रूप से उपयोग करने वाले कथन का उपयोग नहीं कर सकते हैं। यदि आप करते हैं, और ऑब्जेक्ट एक ग़लत स्थिति में है, तो आपको उपयोग() ब्लॉक गुंजाइश से बाहर हो जाता है और डिसपोज़() को wcfClient चर पर निष्पादित किया जाता है जब आपको एक अपवाद फेंक दिया जाएगा। Jesse Ezell's blog

+0

+1 देखें। ऐसा लगता है कि मैं क्या देख रहा था। क्या चैनलफैक्टरी एक सामान्य प्रॉक्सी क्लास की तरह App.config से सभी सेटिंग्स को पढ़ेगा? –

+0

नोट: कॉल करने के लिए कॉलChannel कुछ ऐसा वापस करेगा जो IMyWcfService लागू करता है। इसमें बंद और निरस्त करने की विधियां नहीं होंगी - आपको उन्हें सीधे कारखाने –

+0

पर कॉल करने की आवश्यकता है, चैनलफैक्टरी app.config से सेटिंग्स पढ़ेगी। मेरा मानना ​​है कि ओवरलोड में से एक आपको यह निर्दिष्ट करने की अनुमति देता है कि किस क्लाइंट कॉन्फ़िगरेशन का नाम उपयोग करना है। आप पूरी तरह कॉन्फ़िगरेशन का उपयोग करने और अनदेखा करने के लिए चैनल के लिए बाइंडिंग में गुजरकर कोड में सबकुछ भी कर सकते हैं। क्लाइंट प्रॉक्सी (IMyWcfService) को बंद करने के संबंध में, आप इसे ICOMunicationObject पर डाल सकते हैं और उस ऑब्जेक्ट पर बंद() को कॉल कर सकते हैं। –

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