利用IIS7自带类库管理IIS现在变的更强大更方便,而完全可以不需要用DirecotryEntry这个类了(网上很多.net管理iis6.0的文章都用到了DirecotryEntry这个类 ),Microsoft.Web.Administration.dll位于IIS的目录(%WinDir%\\System32\\InetSrv)下,使用时需要引用,它基本上可以管理IIS7的各项配置。
这个类库的主体结构如下:
主要调用code 如下:
using (ServerManager sm = ServerManager.OpenRemote("192.168.0.129")) { //创建站点 sm.Sites.Add("test", @"D:\DataBackup", 9898); //创建应用程序池 sm.ApplicationPools.Add("test"); //设置站点的应用程序池 sm.Sites["test"].Applications[0].ApplicationPoolName = "test"; sm.CommitChanges(); }
void CreateIISSite(string serverIP, string webName, int port, string path) { try { using (ServerManager sm = ServerManager.OpenRemote(serverIP)) { //创建应用程序池 ApplicationPool appPool = sm.ApplicationPools.FirstOrDefault(x => x.Name == webName); if (appPool == null) { appPool = sm.ApplicationPools.Add(webName); appPool.AutoStart = false; appPool.QueueLength = 10000; appPool.StartMode = StartMode.AlwaysRunning;//启动模式 appPool.Recycling.PeriodicRestart.Time = new TimeSpan();//回收时间间隔 appPool.ProcessModel.IdleTimeout = new TimeSpan();//闲置超时 appPool.ProcessModel.MaxProcesses = 1;//最大工作进程数 } //创建Site Site site = sm.Sites.FirstOrDefault(x => x.Name == webName); if (site == null) { site = sm.Sites.Add(webName, path, port); site.ServerAutoStart = true; site.Bindings[0].EndPoint.Port = port; Application root = site.Applications["/"]; root.ApplicationPoolName = webName; root.VirtualDirectories["/"].PhysicalPath = path; root.SetAttributeValue("preloadEnabled", true); /*预加载*/ } sm.CommitChanges(); } } catch (Exception ex) { ExceptionUtil.Throw(ex); } }
检查 计算机 是否安装有IIS var service = ServiceController.GetServices(serverIp).FirstOrDefault(x => x.ServiceName == "W3SVC");
有关IIS预加载 大家可以参考:预加载会执行Application_Start方法。