2010-08-11 17 views
6

क्या दो व्यवहार कॉन्फ़िगरेशन के साथ एक सेवा हो सकती है? जैसा कि आप जानते हैं कि एक सेवा और एक से अधिक अंतराल होना संभव है जहां आप विभिन्न बाध्यकारी विन्यास निर्दिष्ट कर सकते हैं। लेकिन मुझे एक ही सेवा के लिए, अलग-अलग सेवा व्यवहार करने की आवश्यकता है।एक सेवा, दो व्यवहार विन्यास

अगर मैं कुछ इस तरह का प्रयास करें:

<services> 
    <service name="Service.Service1" behaviorConfiguration="Behavior1"> 
    <host> 
     <baseAddresses> 
      ... 
     </baseAddresses> 
    </host> 

    <endpoint ...> 
    </endpoint> 
    </service> 

    <service name="Service.Service1" behaviorConfiguration="Behavior2"> 
    <host> 
     <baseAddresses> 
      ... 
     </baseAddresses> 
    </host> 

    <endpoint ...> 
    </endpoint> 
    </service> 
</services> 

... मैं त्रुटि "एक बच्चे तत्व एक ही कुंजी के साथ 'सेवा' पहले से ही एक ही विन्यास दायरे में मौजूद नाम"

मैं जानता हूँ कि मिल गया मैं नई कक्षा बना सकता हूं जो मूल सेवा वर्ग को विरासत में लेता है लेकिन क्या बेहतर समाधान है?

उत्तर

2

ऐसा लगता है कि आपको एक ही सेवा कक्षा को किसी अन्य सेवा नाम से पंजीकृत करना चाहिए। सेवा व्यवहार सेवा कॉन्फ़िगरेशन का एक हिस्सा है, इसलिए यदि आप विभिन्न व्यवहारों का उपयोग करना चाहते हैं तो आपको विभिन्न सेवाओं को कॉन्फ़िगर करना चाहिए। मेरा सवाल है: यदि आपके पास दो व्यवहारों के साथ एक सेवा होगी, तो wcf इस एक या दूसरे का उपयोग करने का निर्णय कैसे लेगा? आप विरासत के साथ समाधान क्यों खराब है?

+0

"यदि आपके पास दो व्यवहारों के साथ एक सेवा होगी, तो wcf इस एक या दूसरे का उपयोग करने का निर्णय कैसे लेगा?" - शायद विभिन्न आधार पते से? "आप विरासत के साथ समाधान क्यों खराब है?" - मेरे पास पहले से ही कई लाइव सेवाएं हैं और यह अच्छा होगा अगर मैं केवल कॉन्फ़िगरेशन को बदलकर वांछित परिवर्तन प्राप्त कर सकूं। दूसरी बात यह है कि, इस मामले में, मेरे पास दो वर्ग होंगे जो कॉन्फ़िगरेशन आवश्यकताओं को प्राप्त करने के लिए बिल्कुल अलग नहीं हैं। – Mijalko

1

काफी पेचीदा सवाल है ... मैं अगर मैं क्या कर रहा हूँ का वर्णन संभव है लेकिन समाधान कुछ बात नीचे जैसा होगा कुछ नहीं कर रहा हूँ:

  1. सेवा के लिए अलग अलग नाम चुनें - वहाँ कुछ योजना नाम के रूप में इस तरह के हो जाएगा = "सेवा.Service1.Entry1"
  2. कस्टम सर्विसहोस्ट (शायद IInstanceProvider के साथ जोड़ा गया) लिखें जो अंतिम .ntry1 भाग को अनदेखा कर देगा और Service.Service1 नाम का उपयोग कर सेवा उदाहरण बनाता है।

फिर भी एक और तरीका सेवा से वंचित "सेवा.Service1.Entry1" नामक गतिशील प्रकार इंजेक्शन दे रहा है जब सेवा प्रारंभ हो रही है। यह हिस्सा बहुत संभव है - यानी प्रत्येक उल्लिखित सेवा के लिए, आप एप स्टार्ट-अप पर गतिशील रूप से एन उपप्रकार बनाएंगे ताकि आप उन्हें इरादे के रूप में उपयोग कर सकें।

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