2010-09-18 75 views
10

當我創建一個自託管的wcf應用程序時,我爲每個想要公開的服務創建ServiceHost對象。然後它會查找app.config(匹配服務器名稱),然後提取關聯的端點地址和合同。WCF自託管應用程序可以使用app.config自動創建ServiceHosts嗎?

是否有辦法爲app.config中列出的每個服務自動創建ServiceHosts。我想向app.config添加新的服務,並讓它們自動加載,無需重新編譯我的程序,並使用我手動編碼的過程來創建ServiceHost對象。

有工廠或教程有人可以鏈接我,告訴我如何做到這一點? 謝謝

回答

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 2010-09-18 10:58:38

相關問題