检查IIS状态
写了一个通过访问网页检查IIS的状态的小玩意,这个东西可以改造成一个服务器端任务。这个方法还很偷懒了,回头找找IIS的接口,看看有什么更合适的方法。
using System.Diagnostics;
using System.Net;namespace ifyr.IISController {
class IISController {
static void Main(string[] args) {
if (!CheckUrl("http://localhost/checkState.aspx")) {
Process.Start("IISReset.exe");
}
}static bool CheckUrl(string url) {
HttpWebRequest request = null;
HttpWebResponse response = null;
try {
request = (HttpWebRequest)WebRequest.Create(url);
request.Credentials = CredentialCache.DefaultCredentials;
response = (HttpWebResponse)request.GetResponse();
return (response.StatusCode == HttpStatusCode.OK);
} catch {
return false;
} finally {
if (response != null) {
response.Close();
}
}
}
}
}
如果用程序来重新启动IIS的话,可以使用IShellDispatch2::ServiceStart方法。Shell对象的CLSID是CLSID_SHELL,支持IShellDispatch/IShellDispatch2等接口。这两种方法都可以应用于其它服务。
但是如果不是新开进程,IIS重起的时候也会重新启动CLR,这样会不会把重起IIS的进程关闭掉呢?大概这时候IIS已经在执行重起操作,关闭发送重起消息的进程就没有任何影响了吧。