Ejemplo n.º 1
0
        /// <summary>
        ///  前回失敗したサービスを再実行する
        /// </summary>
        private static void DoErrServicerRestartSc()
        {
            if (lstServiceErr != null && lstServiceErr.Count > 0)
            {
                _logger.Debug("***DoErrServicerRestartSc START***");

                WindowsServiceHelper windowsService = null;

                int iErrServiceResFre = 0;
                // 入力パラメータからサービス再実行回数を取得する
                int iErrServiceResFreMax = int.Parse(ConfigurationManager.AppSettings["ErrServiceResFrequency"]);

                // 入力パラメータからサービス再実行時間間隔を取得する
                int iErrServiceResInterval = int.Parse(ConfigurationManager.AppSettings["ErrServiceResInterval"]);
                System.Threading.Thread.Sleep(iErrServiceResInterval * 60 * 1000);

                // 入力パラメータからサービス起動タイプを取得する
                string strProStartupType = ConfigurationManager.AppSettings["ProgramStartupType"];

                try
                {
                    foreach (ServerConfigElement serviceElem in lstServiceErr)
                    {
                        for (iErrServiceResFre = 0; iErrServiceResFre < iErrServiceResFreMax; iErrServiceResFre++)
                        {
                            try
                            {
                                //WindowsServiceHelperオブジェクトを作成
                                windowsService = new WindowsServiceHelper(serviceElem.ServerAddress,
                                                                          serviceElem.User,
                                                                          serviceElem.Password,
                                                                          serviceElem.ServiceErrNm,
                                                                          serviceElem.ServiceInterval,
                                                                          strProStartupType);

                                //  サーバ再起動を実行する
                                windowsService.ExeStartService();

                                // ログ出力
                                _logger.Info("服務器:" + serviceElem.ServerAddress + "的" + serviceElem.ServiceErrNm + @"服務再次被重啟!");

                                // 正常で起動される場合、対応するサービスを削除する
                                lstServiceErr.Remove(serviceElem);

                                // 次のセービスを進む
                                continue;
                            }
                            catch (RestartSrException rsException)
                            {
                                // ログ出力
                                string msg = rsException.Message + " : " + rsException.InnerException.Message;
                                _logger.Error("服務器:" + serviceElem.ServerAddress + "的" +
                                              serviceElem.ServiceErrNm + @"服務再次啟動失败!(" + Convert.ToString(iErrServiceResFre + 1) + "回) 錯誤信息如下所示:" + Environment.NewLine + msg);
                            }
                            catch (Exception)
                            {
                                throw;
                            }
                        }
                    }
                    _logger.Debug("***DoErrServicerRestartSc END***");
                }
                catch (Exception)
                {
                    _logger.Debug("***DoErrServicerRestartSc ERR***");
                    throw;
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        ///  サーバ再起動する時、指定batファイルを呼び出す
        /// </summary>
        private static void ExecuteBatFileSc()
        {
            _logger.Debug("***ExecuteBatFileSc START***");

            WindowsServiceHelper windowsService = null;

            try
            {
                // 独自に定義したセクション
                ServerSection serSection = ConfigurationManager.GetSection("server.serversection") as ServerSection;

                // 入力パラメータからサービス起動タイプを取得する
                string strProStartupType = ConfigurationManager.AppSettings["ProgramStartupType"];

                if (serSection != null)
                {
                    // 指定検索内容情報リスト初期化
                    lstServiceErr = new List <ServerConfigElement>();

                    foreach (ServerConfigElement elem in serSection.ServerElements)
                    {
                        foreach (String serviceNm in elem.ServiceNm.Split(','))
                        {
                            try
                            {
                                //WindowsServiceHelperオブジェクトを作成
                                windowsService = new WindowsServiceHelper(elem.ServerAddress,
                                                                          elem.User,
                                                                          elem.Password,
                                                                          serviceNm,
                                                                          elem.ServiceInterval,
                                                                          strProStartupType);

                                //  サーバ再起動を実行する
                                windowsService.ExeStartService();

                                // ログ出力
                                _logger.Info("服務器:" + elem.ServerAddress + "的" + serviceNm + @"服務已經被重啟!");
                            }
                            catch (RestartSrException rsException)
                            {
                                if (rsException.ExceptionCd == RestartSrException.ExceptionCode.Err_97)
                                {
                                    // ログ出力
                                    string msg = rsException.Message + " : " + rsException.InnerException.Message;
                                    _logger.Error("服務器:" + elem.ServerAddress + @"連接錯誤!" + "錯誤信息如下所示:" + Environment.NewLine + msg);
                                    break;
                                }
                                else if (rsException.ExceptionCd == RestartSrException.ExceptionCode.Err_98)
                                {
                                    // ログ出力
                                    _logger.Error(@"指定IP:" + elem.ServerAddress + "下對應服务【" + serviceNm + "】不存在!");
                                    continue;
                                }
                                else
                                {
                                    // エラーの場合、エラーサービスをリストに設定する
                                    lstServiceErr.Add(CloneSerConfigItem(elem, serviceNm));

                                    // ログ出力
                                    _logger.Error("服務器:" + elem.ServerAddress + "的" + serviceNm + @"服務啟動錯誤!");
                                }
                            }
                            catch (Exception)
                            {
                                throw;
                            }
                        }
                    }
                }
                _logger.Debug("***ExecuteBatFileSc END***");
            }
            catch (Exception)
            {
                _logger.Debug("***ExecuteBatFileSc ERR***");
                throw;
            }
        }