WCF執行個體 —— Windows Service Host 開發,調試,製作安裝包

來源:互聯網
上載者:User

本篇執行個體介紹如何使用Windows Service來寄宿 WCF服務:

1. 添加 WCF Service Library 工程,這一步沒什麼好說的。
    為了簡單測試,只保留下面一個服務方法:

[csharp] view plaincopy

  1. public class Service1 : IService1  
  2. {  
  3.     public string GetData(int value)  
  4.     {  
  5.         return string.Format("You entered: {0}", value);  
  6.     }  
  7. }  


2. 添加一個 Windows Service 工程,實現 Service1

[html] view plaincopy

  1. public partial class Service1 : ServiceBase  
  2. {  
  3.     public Service1()  
  4.     {  
  5.         InitializeComponent();  
  6.     }  
  7.   
  8.     private ServiceHost _host;  
  9.   
  10.     protected override void OnStart(string[] args)  
  11.     {  
  12.         _host = new ServiceHost(typeof(WinSvcHostWcfLib.Service1));  
  13.         _host.Open();  
  14.     }  
  15.   
  16.     protected override void OnStop()  
  17.     {  
  18.         if (_host != null)  
  19.         {  
  20.             _host.Close();  
  21.             (_host as IDisposable).Dispose();  
  22.         }  
  23.     }  
  24. }  

注意:ServiceHost 裡的 typeof 裡是 Wcf 的 Service,因為都叫 "Service1" 所以注意用 namespace 區分。
    
    添加 WCF Service Library 工程的引用 以及 System.ServiceModel.dll
    在 Service1.cs (Windows Service類) 的設計表單上,右擊點選“Add Installer”, 會在工程裡添加一個 ProjectInstaller 類
    

    (1)修改ProjectInstaller.cs設計器中的 serviceInstaller1 屬性的 ServiceName 為 “WinSvcHostWcf”
    (2)修改ProjectInstaller.cs設計器中的 serviceProcessInstaller1 屬性的 Account 為 LocalSystem (預設為User)
    (3)為了能夠Debug Service,在工程編譯屬性裡加上下面的指令碼,用 installutil.exe 安裝服務,$(TargetPath) 是 Project 編譯宏表示輸出的絕對路徑
    先刪除:
    %systemroot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u $(TargetPath)
    再添加
    %systemroot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe $(TargetPath)
    
    (4)編譯 WinSvcHost 工程,就可以看到在 WinSvcHostWcf 服務在 Windows Service 服務列表中了。(用控制台命令 Services.msc 查看)
    

3. 調試 Windows Service,利用 Debug -> Attach to Process 就可以對託管的進程進行 Debug。
當然 OnStart 裡的代碼是無法調試的,因為只有正常啟動後才能看到這個主控處理序。
但可以用一個Thread來啟動Service。加上Thread.Sleep(),延遲真實代碼的調用。下面的代碼用delegate.BeginInvoke來延遲調用。
還可以利用 OnStart 的輸入參數 args 來控制是否要延遲,使調試更靈活。

4. 建立一個 Console 工程來測試 WCF 服務正常運行:

[csharp] view plaincopy

  1. static void Main(string[] args)  
  2. {  
  3.     var channel = new ChannelFactory<WinSvcHostWcfLib.IService1>(new WSHttpBinding(),   
  4.         "http://localhost:8732/WinSvcHost/Service1/");  
  5.     var svc = channel.CreateChannel();  
  6.     var result = svc.GetData(300);  
  7.     Console.WriteLine(result);  
  8.     Console.Read();  
  9. }  

運行輸出:You entered: 300

 

5. 建立安裝部署程式
(1) 添加主輸出

(2) 修改自訂Action,在 WinSvcHost裡已經添加了ServiceInstaller,在下面步驟中調用主輸出即可。


注意:先運行 installutil.exe /u 清理debug時安裝的 WinSvcHostWcf 服務,再運行產生的 msi 安裝程式。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.