1. 程式人生 > 實用技巧 >c#監聽tomcat服務

c#監聽tomcat服務

https://blog.csdn.net/bornonew/article/details/68941510 在VS2008中建立一個web service專案。

建立兩個WebMethod。

1.啟動Tomcat方法

 1 /// <summary>  2 /// 啟動許可權系統 3 /// </summary>  4 /// <returns>true:成功;false:失敗</returns>  5         [WebMethod] 6         public bool StartPM() 7         { 8             try  9             {10                 // 建立程序啟動資訊 11                 ProcessStartInfo sinfo = new ProcessStartInfo(AppDomain.CurrentDomain.BaseDirectory + "start.bat");12                 // 獲取系統環境變數 13                 IDictionary dics = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine);14                 foreach (string key in dics.Keys)15                 {// 將系統環境變數加入新程序環境變數中 16                     if (sinfo.EnvironmentVariables.ContainsKey(key)) continue;17                     sinfo.EnvironmentVariables.Add(key, dics[key].ToString());18                 }19                 // 不需要從系統外殼程式建立,直接從檔案建立 20                 sinfo.UseShellExecute = false;21                 Process.Start(sinfo);22             }23             catch (Exception ex)24             {25                 //TODO: 寫日誌 26                 return false;27             }28             return true;29         }
複製程式碼

2.關閉Tomcat方法

 1 /// <summary>  2 /// 關閉許可權系統 3 /// </summary>  4 /// <returns>true:成功;false:失敗</returns>  5         [WebMethod] 6         public bool StopPM() 7         { 8             try  9             {10                 // 建立程序啟動資訊 11                 ProcessStartInfo sinfo = new ProcessStartInfo(AppDomain.CurrentDomain.BaseDirectory + "stop.bat");12                 // 獲取系統環境變數 13                 IDictionary dics = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine);14                 foreach (string key in dics.Keys)15                 {// 將系統環境變數加入新程序環境變數中 16                     if (sinfo.EnvironmentVariables.ContainsKey(key)) continue;17                     sinfo.EnvironmentVariables.Add(key, dics[key].ToString());18                 }19                 // 不需要從系統外殼程式建立,直接從檔案建立 20                 sinfo.UseShellExecute = false;21                 Process.Start(sinfo);22             }23             catch (Exception ex)24             {25                 //TODO: 寫日誌 26                 return false;27             }28             return true;29         }
複製程式碼

為了方便以後配置我有新建了兩個bat檔案胸圍。在這兩個檔案中分別做呼叫Tomcat的startup.bat和shutdown.bat的操作。具體如下:

1.start.bat

1 K:\apache-tomcat-6.0.30\bin\startup.bat

2.stop.bat

1 K:\apache-tomcat-6.0.30\bin\shutdown.bat

轉載於:https://my.oschina.net/linuxred/blog/38746

tomcat服務總是莫名其妙的掛掉,暫時無法解決,只能寫個監聽服務,檢測tomcat服務,如果停止,就去啟動它。剛開始用java寫的,發現不太好做成服務,最後用c#開發windows服務。

建立windows服務可參考

http://www.cnblogs.com/sorex/archive/2012/05/16/2502001.html

判斷標準

1.服務是否停止

2.傳送http請求是否有返回

判斷服務是否停止

  1. public bool IsStop()
  2. {
  3. bool isStop = false;
  4. using (System.ServiceProcess.ServiceController control = new ServiceController(serviceName))
  5. {
  6. WriteLog(control.Status.ToString());
  7. if (control.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
  8. {
  9. isStop = true;
  10. }
  11. }
  12. return isStop;
  13. }

判斷HTTP是否有返回

  1. public bool IsResponse()
  2. {
  3. bool isRes = false;
  4. System.Net.HttpWebRequest request;
  5. int counter = 0;
  6. request = (System.Net.HttpWebRequest)WebRequest.Create(strUrl);
  7. request.Timeout = 10000;
  8. //request.Method="get";
  9. System.Net.HttpWebResponse response;
  10. while (counter < 3)
  11. {
  12. WriteLog("try connect:" + counter);
  13. counter++;
  14. try
  15. {
  16. response = (System.Net.HttpWebResponse)request.GetResponse();
  17. isRes = true;
  18. counter = 10;
  19. WriteLog("connect success");
  20. break;
  21. }
  22. catch (WebException ex)
  23. {
  24. WriteLog("connect fail");
  25. Thread.Sleep(3000);
  26. }
  27. }
  28. return isRes;
  29. }

定時任務執行內容

  1. private void timerCall(object obj)
  2. {
  3. try
  4. {
  5. if (IsStop())
  6. {
  7. using (System.ServiceProcess.ServiceController control = new ServiceController(serviceName))
  8. {
  9. control.Start();
  10. }
  11. }
  12. else if (!IsResponse())
  13. {
  14. Process[] processes = Process.GetProcessesByName(exeName);
  15. foreach (Process p in processes)
  16. {
  17. WriteLog("kill Start.");
  18. p.Kill();
  19. p.Close();
  20. WriteLog("kill end.");
  21. }
  22. }
  23. }
  24. catch (Exception ex)
  25. {
  26. WriteLog(ex.ToString());
  27. }
  28. }



除錯方法可參考

http://www.cnblogs.com/brucezhang80/p/4177913.html

原始碼

點選開啟連結

說明

debug模式下,把輸出型別改為控制檯應用程式,方便除錯

release模式下,把輸出型別改為Windows 應用程式

考慮到有時候服務停止時間很長。當測試頁面HTTP無返回而服務並未在停止狀態,直接殺死相應程序,而不是去等待服務停止。