c#监听tomcat服务

tomcat服务总是莫名其妙的挂掉,暂时无法解决,只能写个监听服务,检测tomcat服务,如果停止,就去启动它。刚开始用java写的,发现不太好做成服务,最后用c#开发windows服务。

建立windows服务可参考

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


判断标准

1.服务是否停止

2.发送http请求是否有返回


判断服务是否停止

  public bool IsStop()
        {
            bool isStop = false;
            using (System.ServiceProcess.ServiceController control = new ServiceController(serviceName))
            {
                WriteLog(control.Status.ToString());
                if (control.Status == System.ServiceProcess.ServiceControllerStatus.Stopped)
                {
                    isStop = true;
                }
            }
            return isStop;
        }

判断HTTP是否有返回

 

  public bool IsResponse()
        {
            bool isRes = false;
            System.Net.HttpWebRequest request;
            int counter = 0;
            request = (System.Net.HttpWebRequest)WebRequest.Create(strUrl);
            request.Timeout = 10000;

            //request.Method="get";
            System.Net.HttpWebResponse response;
            while (counter < 3)
            {
                WriteLog("try connect:" + counter);
                counter++;
                try
                {
                    response = (System.Net.HttpWebResponse)request.GetResponse();
                    isRes = true;
                    counter = 10;
                    WriteLog("connect success");
                    break;
                }
                catch (WebException ex)
                {
                    WriteLog("connect fail");
                    Thread.Sleep(3000);
                }
            }
            return isRes;
        }

定时任务执行内容

        private void timerCall(object obj)
        {
            try
            {
                if (IsStop())
                {
                    using (System.ServiceProcess.ServiceController control = new ServiceController(serviceName))
                    {
                        control.Start();
                    }
                }
                else if (!IsResponse())
                {
                    Process[] processes = Process.GetProcessesByName(exeName);

                    foreach (Process p in processes)
                    {
                        WriteLog("kill Start.");
                        p.Kill();
                        p.Close();
                        WriteLog("kill end.");
                    }
                }
            }
            catch (Exception ex)
            {
                WriteLog(ex.ToString());
            }

        }


调试方法可参考

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

源代码

点击打开链接

说明

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

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

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值