c# - स्नातक होने के बाद लाइब्रेरियन पाठ्यक्रम




कक्षा लाइब्रेरी से सेवा संदर्भ शामिल करना (4)

मेरे पास सी # कक्षा पुस्तकालय और स्टार्टअप प्रोजेक्ट (कंसोल ऐप) है। कक्षा पुस्तकालय में वेब सेवा के लिए एक सेवा संदर्भ शामिल है जब मैं प्रोजेक्ट को चलाने का प्रयास करता हूं, मुझे एक अमान्यऑपरेशन अपवाद मिलता है क्योंकि स्टार्टअप प्रोजेक्ट कक्षा पुस्तकालय के ऐप। कॉन्फ़िग को नहीं पढ़ रहा है, और यह सेवा संदर्भ की अनदेखी कर रहा है। इसे काम करने के लिए, मुझे स्टार्टअप प्रोजेक्ट के समान सर्विस संदर्भ जोड़ने के लिए मजबूर होना है I क्या कोई ऐसा तरीका है जो मैं इस से बच सकता हूं? क्या मैं स्टार्टअप प्रोजेक्ट क्लास लायब्रेरी के सेवा संदर्भ और ऐप। कॉन्फ़िग को इसे स्टार्टअप प्रोजेक्ट की प्रतिलिपि किए बिना पहचान सकता हूं?

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


आप कंसोल एप्लिकेशन के लिए app.config में कक्षा पुस्तकालय के कॉन्फ़िगरेशन से app.config के प्रासंगिक भाग को कॉपी कर सकते हैं।

वैकल्पिक रूप से, यदि आप वास्तव में यह वास्तव में पोर्टेबल बनाने की कोशिश कर रहे हैं, तो आपको कक्षा लाइब्रेरी के भीतर से विशिष्ट सेवा के संदर्भ के लिए पते को संदर्भित करने के अन्य तरीके के बारे में सोचने की आवश्यकता होगी।


आप क्या करने की कोशिश कर रहे हैं, इसके बारे में सोचें - आपके पास दो विधानसभाएं हैं जिन्हें आप बना रहे हैं:

Library
ConsoleApp

इन दोनों विधानसभाओं में विन्यास फाइल हैं - मुझे लगता है वे इस तरह से कुछ दिखते हैं:

Library
    app.config
ConsoleApp
    ConsoleApp.exe.config

जब आप ConsoleApp चलाते हैं तो उसे पढ़ने से कोई ConsoleApp नहीं होता है या एबॉउट app.config को आपके Library असेंबली से नहीं पता था। केवल कॉन्फ़िगरेशन फ़ाइल जिसे वह जानता है या इसके बारे में परवाह है, ConsoleApp.exe.config अब कॉन्फ़िगरेशन फ़ाइलों को एक-दूसरे के संदर्भ में करना संभव है लेकिन यह आप के लिए उचित समाधान नहीं है।

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

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

यह आपको आपकी वेब सेवा के तरीकों को लागू करने के लिए दो चीजों की आवश्यकता होगी

  1. Library में कोड जो SOAP संदेश भेज और प्राप्त कर सकता है
  2. कार्यप्रणाली के लिए Library द्वारा आवश्यक विन्यास मेटाडेटा।

मुझे लगता है कि यह अधिक भ्रमित करेगा अगर आपके पास कई कॉन्फ़िगरेशन फ़ाइलें चल रही थीं

यदि कोई पुस्तकालय कॉन्फ़िगर करने योग्य आइटम है, तो मुझे पूरी तरह से मेरी कॉन्फ़िग फाइल में उस विन्यास को लाइब्रेरी ठीक से उपयोग करने की अपेक्षा करने की अपेक्षा होगी।


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

कक्षा पुस्तकालय में, एक बिल्ड ईवेंट का उपयोग करें जो केवल प्रॉक्सी कोड उत्पन्न करता है:

svcutil.exe net.tcp://localhost:3315/MyService/mex /noConfig

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

svcutil.exe net.tcp://localhost:3315/MyService/mex 
            /config:App.config /mergeConfig

यदि आप सेवा नहीं चल रही हैं, तो बिल्ड बिल्ड त्रुटि प्राप्त नहीं करना चाहते हैं, इसे अपनी प्रोजेक्ट फाइल में डाल दें और आपको एक त्रुटि की बजाय एक चेतावनी मिलेगी:

<Target
    Name="PreBuildEvent"
    Condition="'$(PreBuildEvent)'!=''"
    DependsOnTargets="$(PreBuildEventDependsOn)">
  <Exec WorkingDirectory="$(OutDir)"
        Command="$(PreBuildEvent)"
        ContinueOnError="true" />
</Target>




service-reference