2010-09-18 9 views
10

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

क्या app.config में सूचीबद्ध प्रत्येक सेवा के लिए स्वचालित रूप से ServiceHosts बनाने का कोई तरीका है। मैं app.config में नई सेवाएं जोड़ना चाहता हूं और उन्हें अपने प्रोग्राम को पुन: सम्मिलित किए बिना स्वचालित रूप से लोड किया गया है और सर्विसहोस्ट ऑब्जेक्ट्स बनाने के लिए मैन्युअल रूप से कोडित प्रक्रिया का उपयोग कर रहा हूं।

क्या कोई कारखाना या ट्यूटोरियल कोई मुझे लिंक कर सकता है जो मुझे दिखाता है कि यह कैसे करें? धन्यवाद

उत्तर

19

मुझे यकीन नहीं है कि कॉन्फ़िगर से संबंधित पते और अनुबंध खींचकर आपका क्या मतलब है - यह स्वचालित रूप से किया जाता है।

सेवा की मेजबानी: विन्यास फाइल में सेवा अनुभाग स्वचालित रूप से सेवा के प्रकार ServiceHost में होस्ट के साथ जोड़ा जाता

using (var host = new ServiceHost(typeof(MyNamespace.Service)) 
{ 
    // no endpoint setting needed if configuration is correctly paired by the type name 
    host.Open() 
} 

सेवा विन्यास:

<services> 
    <service name="MyNamespace.Service"> 
    ... 
    </service> 
</service> 

अब केवल एक चीज आप की जरूरत को संभालने के लिए ServiceHost है स्वचालित रूप से निर्माण। यह करने के लिए मेरा नमूना कोड यहां दिया गया है:

class Program 
    { 
     static void Main(string[] args) 
     { 
      List<ServiceHost> hosts = new List<ServiceHost>(); 

      try 
      { 
       var section = ConfigurationManager.GetSection("system.serviceModel/services") as ServicesSection; 
       if (section != null) 
       { 
        foreach (ServiceElement element in section.Services) 
        { 
         var serviceType = Type.GetType(element.Name); 
         var host = new ServiceHost(serviceType); 
         hosts.Add(host); 
         host.Open(); 
        } 
       } 

       Console.ReadLine(); 
      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.Message); 
       Console.ReadLine(); 
      } 
      finally 
      { 
       foreach (ServiceHost host in hosts) 
       { 
        if (host.State == CommunicationState.Opened) 
        { 
         host.Close(); 
        } 
        else 
        { 
         host.Abort(); 
        } 
       } 
      } 
     } 
    } 
+0

बहुत बढ़िया! वह वही टुकड़ा था जिसे मैं याद कर रहा था। मुझे यकीन नहीं था कि सेवाओं को तत्काल करने के लिए कॉन्फ़िगरेशन को कैसे पार किया जाए। क्षमा करें मैं अपने प्रश्न में बहुत अस्पष्ट था। मुझे यकीन नहीं था कि इसे कैसे वाक्यांशित किया जाए। – djmc

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