1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading;
6 using System.IO;
7 using Microsoft.Web.Administration;
8
9
10 namespace RecoveryWebSite
11 {
12 class Program
13 {
14 const string AppPoolName = "POD";
15 const string WebSiteName = "POD";
16 const int SleepTime = 1000 * 60;
17
18 static void Main(string[] args)
19 {
20
21 Thread tAppPool = new Thread(() => RecoveryAppPool());
22 tAppPool.IsBackground = true;
23 tAppPool.Start();
24
25 Thread tWebSite = new Thread(() => RecoveryWebSite());
26 tWebSite.IsBackground = true;
27 tWebSite.Start();
28
29 //防止程序退出
30 while (true)
31 {
32 Thread.Sleep(SleepTime);
33 }
34 }
35
36 static void RecoveryAppPool()
37 {
38 while (true)
39 {
40 var sm = new ServerManager();
41 var pool = sm.ApplicationPools[AppPoolName];
42 if (pool != null && pool.State == ObjectState.Stopped)
43 {
44 WriteLog("检测到应用池" + AppPoolName + "停止服务");
45 WriteLog("正在启动应用池" + AppPoolName);
46 if (pool.Start() == ObjectState.Started)
47 {
48 WriteLog("成功启动应用池" + AppPoolName);
49 }
50 else
51 {
52 WriteLog("启动应用池" + AppPoolName + "失败. " + SleepTime / 60 + "秒后重试启动");
53 }
54 }
55 sm.Dispose();
56 sm = null;
57 Thread.Sleep(SleepTime);
58 }
59 }
60
61 static void RecoveryWebSite()
62 {
63 while (true)
64 {
65 var sm = new ServerManager();
66 var site = sm.Sites[WebSiteName];
67 if (site != null && site.State == ObjectState.Stopped)
68 {
69 WriteLog("检测到网站" + WebSiteName + "停止服务");
70 WriteLog("正在启动网站" + WebSiteName);
71 if (site.Start() == ObjectState.Started)
72 {
73 WriteLog("成功启动网站" + WebSiteName);
74 }
75 else
76 {
77 WriteLog("启动网站" + WebSiteName + "失败. " + SleepTime / 60 + "秒后重试启动");
78 }
79 }
80 sm.Dispose();
81 sm = null;
82 Thread.Sleep(SleepTime);
83 }
84 }
85
86 static void WriteLog(string msg)
87 {
88 var fPath = "c:\\RecoveryWebsiteLog.txt";
89 if (!File.Exists(fPath))
90 {
91 File.Create(fPath).Close();
92 }
93
94 using (StreamWriter sw = new StreamWriter(fPath, true, Encoding.UTF8))
95 {
96 sw.WriteLine(string.Format("{0} , 时间{1}", msg, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")));
97 }
98 }
99 }
100 }