Windows服務二:測試建立的服務、調試Windows服務

來源:互聯網
上載者:User

標籤:ted   component   以管理員身份運行   contract   技術分享   run   lin   out   mon   

一、測試Windows服務

為了使Windows服務程式能夠正常運行,我們需要像建立一般應用程式那樣為它建立一個程式的進入點。像其他應用程式一樣,Windows服務也是在Program.cs的Main()函數中完成這個操作。首先我們在Main()函數中建立一個Windows服務的執行個體,該執行個體應該是ServiceBase類的某個子類的對象,然後我們調用由基類ServiceBase類定義的一個Run()方法。然而調用Run()方法並不意味著就開始了Windows服務程式,必須要等到該對象的OnStart()方法被調用時服務才算真正開始運行。如果你想在一個Windows服務程式中同時啟動多個服務,那麼只要在Main()函數中定義多個ServiceBase類的子類的執行個體對象就可以了,方法就是建立一個ServiceBase類的數組對象。

 1 namespace WindowsServiceDemo 2 { 3     static class Program 4     { 5         /// <summary> 6         /// 應用程式的主進入點。 7         /// </summary> 8         static void Main() 9         {10             ServiceBase[] ServicesToRun;11             ServicesToRun = new ServiceBase[] 12             { 13                 //服務114                 new MyService(), 15                 //服務216                 new Service1()17             };18             ServiceBase.Run(ServicesToRun);19         }20     }21 }

由於Windows服務沒有直接的使用者互動,服務的狀態必須通過記錄日誌才可知曉。要測試windows服務,可以通過重寫服務裡面的方法,在方法裡面記錄日誌來實現。

1、建立Common類,類裡面有一個WriteLog記錄日誌的方法。日誌路徑寫在設定檔裡面,可以實現項目的靈活性。

 1 namespace WindowsServiceDemo 2 { 3     public class Common 4     { 5         /// <summary> 6         /// 記錄日誌 7         /// </summary> 8         /// <param name="strInfo"></param> 9         public static void WriteLog(string strInfo)10         {11             string strPath=ConfigurationManager.AppSettings["FilePath"];12             using (StreamWriter sw = new StreamWriter(strPath, true))13             {14                 sw.WriteLine(strInfo + ",目前時間:" + DateTime.Now.ToString());15                 sw.Close();16             }17             18         }19     }20 }
View Code

2、在Service1的設計介面點右鍵-->查看代碼,開啟Service1的代碼,分別重寫OnStart()、OnStop()、OnPause()、OnContinue()方法,在方法裡面調用Common類的WriteLog方法來記錄服務的運行狀態。

 1 namespace WindowsServiceDemo 2 { 3     public partial class MyService : ServiceBase 4     { 5         public MyService() 6         { 7             InitializeComponent(); 8         } 9 10         /// <summary>11         /// 服務啟動時執行的代碼12         /// </summary>13         /// <param name="args"></param>14         protected override void OnStart(string[] args)15         {16             try17             {18                 Common.WriteLog("服務啟動");19             }20             catch (Exception ex)21             {22                 Common.WriteLog("服務啟動出錯:"+ex.Message);23             }24         }25 26         /// <summary>27         /// 服務停止時執行的代碼28         /// </summary>29         protected override void OnStop()30         {31             try32             {33                 Common.WriteLog("服務停止");34             }35             catch (Exception ex)36             {37                 38                 Common.WriteLog("服務停止出錯:"+ex.Message);39             }40         }41 42         /// <summary>43         /// 服務暫停時執行的代碼44         /// </summary>45         protected override void OnPause()46         {47             try48             {49                 Common.WriteLog("服務暫停");50             }51             catch (Exception ex)52             {53                 54                  Common.WriteLog("服務暫停出錯:"+ex.Message);55             }56         }57 58         /// <summary>59         /// 服務恢複時執行的代碼60         /// </summary>61         protected override void OnContinue()62         {63             try64             {65                 Common.WriteLog("服務恢複");66             }67             catch (Exception ex)68             {69                 70                  Common.WriteLog("服務恢複出錯:"+ex.Message);71             }72         }73 74     }75 }

3、在服務控制管理員裡面分別啟動、暫停、恢複、停止服務,查看產生的日誌:

日誌裡面正確記錄了服務的運行狀態,證明服務沒有問題。

二、調試Windows服務

 調試Windows服務,可以採用將服務附加到進程的方法。

1、在功能表列選項裡面選擇調試-->附加到進程

2、在附加到進程介面,選擇相應的服務進程,點擊附加。
注意:要把服務附加到進程,必須保證服務是啟動狀態,否則在進程裡面看不到服務的進程。

三、總結:
1、Windows服務調試不能直接F5,可以通過附加到進程方式調試(調試前提:將服務啟動、以管理員身份運行VS)
2、Windows服務由於沒有直接的使用者互動,服務的狀態必須通過日誌才可知曉,恰當的加入try catch
3、所有可能發生變化的內容都不要寫死,盡量通過設定檔來實現,這是項目靈活性的重要指標
4、Windows服務多用於定時操作、大資料量操作、監控操作等方面

 

Windows服務二:測試建立的服務、調試Windows服務

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.