2009-07-07 13 views
7

मेरे पास एक वेब सेवा के संदर्भ में एक क्लास लाइब्रेरी (.NET) है (कुछ सर्वर में, एक ही समाधान में कोई प्रोजेक्ट नहीं)। कक्षा पुस्तकालय में एक वर्ग है जो COM के संपर्क में है। यह कक्षा वेब सेवा का आह्वान करती है।सेवा संदर्भों के साथ कक्षा पुस्तकालय

जब मैं सेवा संदर्भ जोड़ता हूं, तो यह कक्षा पुस्तकालय के app.config में कोड जोड़ता है।

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

डिफ़ॉल्ट एंडपॉइंट तत्व नहीं मिला जो सेवा मॉडल क्लाइंट कॉन्फ़िगरेशन अनुभाग में अनुबंध 'ServiceProxy.EventsServices' संदर्भित करता है। ऐसा इसलिए हो सकता है क्योंकि आपके एप्लिकेशन के लिए कोई कॉन्फ़िगरेशन फ़ाइल नहीं मिली है, या क्योंकि इस अनुबंध से मेल खाने वाला कोई एंडपॉइंट तत्व क्लाइंट तत्व में नहीं पाया जा सकता है।

इस अपवाद को क्लास लाइब्रेरी के app.config में सेवा संदर्भ के लिए जेनरेट कोड को कॉपी और पेस्ट करके हल किया जा सकता है डेस्कटॉप एप्लिकेशन 'कॉन्फ़िगरेशन फ़ाइल में।

जब मैं तैनाती करता हूं, मुझे केवल डीएलएल (कक्षा पुस्तकालय से निर्मित) को तैनात करना होगा, न कि डेस्कटॉप ऐप। मुझे एक कॉन्फ़िगरेशन फ़ाइल में सेवा संदर्भ शामिल करने की आवश्यकता है जिसे DLL द्वारा पढ़ा जा सकता है।

कोई सुझाव?

धन्यवाद!

+1

ऐसा करने का एकमात्र तरीका क्लास लाइब्रेरी app.config से एप्लिकेशन की कॉन्फ़िगरेशन फ़ाइल में कॉपी करना है। यह यहां कई अन्य प्रश्नों का एक डुप्लिकेट है। –

+0

उदाहरण के लिए: http://stackoverflow.com/questions/502919/how-to-configure-wcf-in-a-seperate-dll-project –

उत्तर

6

जब आप कोई सेवा संदर्भ जोड़ते हैं, तो विजुअल स्टूडियो आपके लिए प्रॉक्सी उत्पन्न करता है, जो सेवा के यूआरएल के लिए app.config फ़ाइल पढ़ता है।

आपके पास स्थिर URL प्रदान करने का विकल्प है जो कॉन्फ़िगर फ़ाइल का उपयोग नहीं करता है।

यदि आप जटिल होना चाहते हैं, और app.config सेटिंग्स के बिना गतिशील यूआरएल प्रदान करते हैं, तो आप इस जेनरेट कोड की प्रतिलिपि बना सकते हैं और इसे कॉन्फ़िगरेशन डेटा (जैसे पैरामीटर, उदाहरण के लिए) के लिए किसी अन्य प्रकार के स्रोत का उपयोग करने के लिए संशोधित कर सकते हैं और जिस तरह से आप केवल डीएलएल तैनात कर सकते हैं।

जेनरेट कोड सेवा संदर्भ के पीछे कोड में छिपा हुआ है। कोड देखने के लिए, आपको समाधान एक्सप्लोरर के लिए "सभी फ़ाइलें दिखाएं" विकल्प को सक्रिय करना होगा, और संदर्भ.मैप फ़ाइल के अंतर्गत फ़ाइल Refecence.cs (या .vb) देखें।

यह कोड आपको सीधे संशोधित नहीं करना चाहिए, इसके बजाय, कोड कॉपी करें और फिर अपनी संरचना के भीतर एक नई कक्षा बनाएं। (और मूल संदर्भ हटाएं)

नोटिस लें, कि यदि आप सेवा (या Wsdl) को संशोधित करते हैं तो आपको कक्षा को मैन्युअल रूप से संशोधित करना होगा।

+0

संदर्भ.cs को उसके प्रश्न के साथ क्या करना है, और आप क्यों हैं इसे संशोधित करने के बारे में बात कर रहे हैं? मुझे लगता है कि आपको उस हिस्से को हटाने के लिए अपना प्रश्न संपादित करना चाहिए। –

+0

क्योंकि ब्लॉपरोड कॉन्फ़िगरेशन का उपयोग नहीं करना चाहता है, यह COM को सेवा का खुलासा कर रहा है। इसे कॉन्फ़िगरेशन पर प्रॉक्सी की निर्भरता को संशोधित करने की आवश्यकता है। –

+0

लेकिन इनमें से कोई भी संदर्भ.cs में नहीं है। –

2

.NET कॉन्फ़िगरेशन API का सभी उपयोग एप्लिकेशन की कॉन्फ़िगरेशन फ़ाइल से कॉन्फ़िगरेशन प्राप्त करता है। डीएलएल कॉन्फ़िगरेशन फ़ाइल जैसी कोई चीज़ नहीं है - आपके क्लास लाइब्रेरी में जो एप.कॉन्फिग दिखाई देता है वह आपको दिखा रहा है कि आपको कॉपी करने की आवश्यकता होगी।

अब, यदि आप केवल असेंबली को तैनात कर सकते हैं, तो आपकी असेंबली को कोड में स्वयं को कॉन्फ़िगर करने की आवश्यकता होगी।

2

त्वरित उत्तरों के लिए धन्यवाद दोनों =)। मैं ध्यान में रखूंगा।

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

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

अब तक, मेरा समाधान वेब संदर्भ का उपयोग करना होगा। मुझे लगता है कि मुझे फ़ाइल से कॉन्फ़िगर करने योग्य बनाने के लिए कुछ तंत्र को कोड करना होगा।

फिर से, आप दोनों के लिए धन्यवाद!

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