c#监听tomcat服务


https://blog.csdn.net/bornonew/article/details/68941510   在VS2008中创建一个web service项目。

创建两个WebMethod。

1.启动Tomcat方法

 1 ///   2 /// 启动权限系统 3 ///   4 /// true:成功;false:失败  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 ///   2 /// 关闭权限系统 3 ///   4 /// true:成功;false:失败  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.    
  9.   //request.Method="get";
  10.   System.Net.HttpWebResponse response;
  11.   while (counter < 3)
  12.   {
  13.   WriteLog("try connect:" + counter);
  14.   counter++;
  15.   try
  16.   {
  17.   response = (System.Net.HttpWebResponse)request.GetResponse();
  18.   isRes = true;
  19.   counter = 10;
  20.   WriteLog("connect success");
  21.   break;
  22.   }
  23.   catch (WebException ex)
  24.   {
  25.   WriteLog("connect fail");
  26.   Thread.Sleep(3000);
  27.   }
  28.   }
  29.   return isRes;
  30.   }

定时任务执行内容

  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.    
  16.   foreach (Process p in processes)
  17.   {
  18.   WriteLog("kill Start.");
  19.   p.Kill();
  20.   p.Close();
  21.   WriteLog("kill end.");
  22.   }
  23.   }
  24.   }
  25.   catch (Exception ex)
  26.   {
  27.   WriteLog(ex.ToString());
  28.   }
  29.    
  30.   }



调试方法可参考

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

源代码

点击打开链接

说明

debug模式下,把输出类型改为控制台应用程序,方便调试

release模式下,把输出类型改为Windows 应用程序

考虑到有时候服务停止时间很长。当测试页面HTTP无返回而服务并未在停止状态,直接杀死相应进程,而不是去等待服务停止。