public static void 强制关闭(string 务名称, string 进程名称) { H调试.记录提示(string.Format("准备关闭 {0} 服务", 务名称)); 关闭(务名称); var __服务状态 = 查询状态(务名称); if (__服务状态 != ServiceControllerStatus.Stopped) { H调试.记录提示(string.Format("未能正常关闭服务, 准备关闭 {0} 的进程'{1}'", 务名称, 进程名称)); var __进程列表 = Process.GetProcesses().ToList().FindAll(q => q.ProcessName == 进程名称); H调试.记录提示("找到进程数: " + __进程列表.Count); if (__进程列表.Count > 0) { foreach (var process in __进程列表) { try { process.Kill(); process.WaitForExit(); } catch (Exception ex) { H调试.记录异常(ex, string.Format("关闭服务失败, 服务名称: {0}, 服务进程: {1}", 务名称, 进程名称)); } } } } }
public void 关闭() { H调试.记录提示("关闭"); if (_监听器 != null) { _监听器.Close(); } 已开启 = false; }
public void 开启() { if (!HttpListener.IsSupported) { Debug.WriteLine("Windows XP SP2 or Server 2003 is required to use the HttpListener class."); return; } if (_监听器 != null && _监听器.IsListening) { return; } _监听器 = new HttpListener(); _监听器.Prefixes.Add(string.Format("http://localhost:{0}/", 端口)); _监听器.Prefixes.Add(string.Format("http://127.0.0.1:{0}/", 端口)); var __本机IP列表 = Dns.GetHostAddresses(Dns.GetHostName()).Where(q => q.AddressFamily == AddressFamily.InterNetwork).ToList(); __本机IP列表.ForEach(q => _监听器.Prefixes.Add(string.Format("http://{1}:{0}/", 端口, q))); _监听器.Start(); 已开启 = true; H调试.记录提示("已开启"); new Thread(() => { try { while (_监听器.IsListening) { _监听器.BeginGetContext(处理请求, _监听器).AsyncWaitHandle.WaitOne(); } } catch (Exception ex) { if (已开启) { H调试.记录异常(ex); } } 已开启 = false; }) { IsBackground = true }.Start(); }
public static void 关闭(string __服务名, System.TimeSpan __超时) { var __服务 = ServiceController.GetServices().ToList().Find(q => q.ServiceName == __服务名); if (__服务 != null && __服务.Status == ServiceControllerStatus.Running) { __服务.Stop(); __服务.WaitForStatus(ServiceControllerStatus.Stopped, __超时); } else { if (__服务 == null) { H调试.记录提示(string.Format("服务 {0} 不存在", __服务名)); return; } H调试.记录提示(string.Format("服务 {0} 没在运行中, 当前状态: {1}", __服务名, __服务.Status)); } }
public static void 开启(string __服务名, System.TimeSpan __超时) { var __服务 = ServiceController.GetServices().ToList().Find(q => q.ServiceName == __服务名); if (__服务 != null && __服务.Status != ServiceControllerStatus.Running) { __服务.Start(); __服务.WaitForStatus(ServiceControllerStatus.Running, __超时); } else { if (__服务 == null) { H调试.记录提示(string.Format("服务 {0} 不存在", __服务名)); return; } H调试.记录提示(string.Format("服务 {0} 正在运行, 无需开启", __服务名)); } }
public void 监控下执行 <T>(string __队列名称, T __数据, int __接收时间, Action <T> __处理数据) { var __延迟 = Environment.TickCount - __接收时间; Interlocked.Add(ref _总延时, __延迟); var __计时器 = new Stopwatch(); __计时器.Start(); __处理数据(__数据); var __耗时 = __计时器.ElapsedMilliseconds; Interlocked.Add(ref _总耗时, __耗时); Interlocked.Add(ref _数量, 1); if (_数量 >= _分组统计数量) { var __日志 = new StringBuilder(); __日志.AppendFormat("处理数量 {0},", _数量); __日志.AppendFormat("总耗时 {0},", _总耗时); __日志.AppendFormat("平均处理耗时 {0} 毫秒,", _总耗时 / _数量); __日志.AppendFormat("平均延迟 {0},", _总延时 / _数量); H日志.记录("统计", _总延时 / _数量 > _延迟阈值 ? TraceEventType.Warning : TraceEventType.Information, __日志.ToString()); Interlocked.Exchange(ref _数量, 0); Interlocked.Exchange(ref _总耗时, 0); Interlocked.Exchange(ref _总延时, 0); } if (__耗时 > _耗时阈值) { var __日志 = new StringBuilder(); __日志.AppendFormat("处理 {0} ,", __数据); __日志.AppendFormat("耗时 {0} 毫秒. ", __计时器.ElapsedMilliseconds); H调试.记录提示("耗时告警:" + __队列名称, __日志.ToString()); } if (__延迟 > _延迟阈值) { var __日志 = new StringBuilder(); __日志.AppendFormat("处理 {0} ,", __数据); __日志.AppendFormat("延迟 {0} 毫秒, ", __延迟); H调试.记录提示("延迟:" + __队列名称, __日志.ToString()); } }