zoukankan      html  css  js  c++  java
  • 保证依赖的服务已全部启动

    1.功能介绍:

      保证配置文件中,设置的服务已全部启动;未启动的服务,以异常日志的形式记录。

    2.设计思路:

      Step1:配置文件设置需要默认启动的服务名称

      Step2:声明一个服务类对象sc,并从配置文件中的文件名读取出来放于数组depenentServiceArray当中

      Step3:遍历服务名称集合。若服务未启动,则启动该服务,并记录日志;若服务异常,则记录服务异常日志

      Step4:判断服务是否全部启动。若没有全部启动,则线程休眠规定时间,再次循环,直到服务成功启动;若完成启动,则退出

    3.ServiceController 介绍:

      定义:可以使用 ServiceController 类连接到现有服务并控制其行为,当创建 ServiceController 类的实例时,设置其属性,以便它与特定的 Windows 服务交互作用。然后可以使用此类来启动、停止和以其他方式操作该服务。

      创建 ServiceController 的实例后,必须为其设置两个属性来标识与其交互的服务:计算机名称和要控制的服务的名称。

    4.代码片段:

    public class ServiceProcessorUtil
        {
            public static void CheckDependentServiceAndWait()
            {
                string dependentServices = ConfigurationManager.AppSettings["DependentServices"];    //从配置文件读取依赖服务集
                if (!string.IsNullOrEmpty(dependentServices))
                {
                    bool success;
                    System.ServiceProcess.ServiceController sc;
                    string[] depenentServiceArray = dependentServices.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
                    while (true)
                    {
                        success = true;
                        foreach (string serviceName in depenentServiceArray)    //遍历依赖的服务集
                        {
                            sc = new System.ServiceProcess.ServiceController(serviceName);    //初始化计算机上与服务有关的类
                            if (sc != null)
                            {
                                try
                                {
                                    if (sc.Status != System.ServiceProcess.ServiceControllerStatus.Running)
                                    {
                                        sc.Start();
                                        //ExceptionUtil:异常处理公共方法
                                        ExceptionUtil.WriteLog(new Exception("依赖的服务:" + serviceName + "不存在或未正常运行"));
                                        success = false;
                                        break;
                                    }
                                }
                                catch
                                {
                                    ExceptionUtil.WriteLog(new Exception("依赖的服务:" + serviceName + "未正常运行"));
                                    success = false;
                                    break;
                                }
                            }
                            else
                            {
                                ExceptionUtil.WriteLog(new Exception("依赖的服务:" + serviceName + "不存在"));
                                success = false;
                                break;
                            }
                            sc.Close();
                            sc.Dispose();
                        }
                        if (success)
                        {
                            break;
                        }
                        else
                        {
                            Thread.Sleep(Convert.ToInt16(ConfigurationManage.AppSettings["ThreadSleepTime"]) * 1000);
                        }
                    }
                }
            }
        }
  • 相关阅读:
    Unity中Avatar换装实现
    Unity 导出NavMesh (可行走区域判定) 数据给服务器使用
    Unity发布安卓Splash Image适应手机、平板
    什么是展uv
    三合一收款二维码
    牛顿的八字养生经
    牛顿
    [家里蹲大学数学杂志]第412期积分与极限
    Newton's Dark Secrets《牛顿探索》
    英国《物理世界》杂志评选出世界十大物理学家
  • 原文地址:https://www.cnblogs.com/mahuanpeng/p/6832370.html
Copyright © 2011-2022 走看看