一、IIS中相关对象的关系图
二、IIS对象的浏览与查看
#region 遍历iis的相关方法 //相关默认属性的查看参考 http://www.cnblogs.com/devinhua/p/3676546.html ///// <summary> ///// 通过 服务器 获取 站点相关属性 ///// </summary> //public void ShowSite() //{ // ServerManager server = new ServerManager(); // SiteCollection sites = server.Sites; // foreach (Site site in sites) // { // ApplicationDefaults defaults = site.ApplicationDefaults; // string appPoolName = defaults.ApplicationPoolName; // ConfigurationAttributeCollection attributes = defaults.Attributes; // foreach (ConfigurationAttribute configAttribute in attributes) // { // //...... // } // ConfigurationAttributeCollection attributesCollection = site.Attributes; // foreach (ConfigurationAttribute attribute in attributesCollection) // { // //...... // } // // // BindingCollection bindings = site.Bindings; // foreach (Microsoft.Web.Administration.Binding binding in bindings) // { // //...... // } // //站点状态 // ObjectState siteState = site.State; // //站点对应的应用程序池 // ApplicationCollection applications = site.Applications; // foreach (Microsoft.Web.Administration.Application application in applications) // { // //...... // } // } //} ///// <summary> ///// 通过 站点 获取 应用程序池相关属性 ///// </summary> ///// <param name="site"></param> //public void ShowSite(Site site) //{ // ApplicationCollection applications = site.Applications; // foreach (Microsoft.Web.Administration.Application application in applications) // { // string applicationPoolName = application.ApplicationPoolName; // VirtualDirectoryCollection directories = application.VirtualDirectories; // foreach (VirtualDirectory directory in directories) // { // //...... // } // } //} ///// <summary> ///// 通过应用程序池 获取虚拟路径 相关属性 ///// </summary> ///// <param name="application"></param> //public void ShowApp(Application application) //{ // VirtualDirectoryCollection directories = application.VirtualDirectories; // foreach (VirtualDirectory directory in directories) // { // ConfigurationAttributeCollection attributes = directory.Attributes; // foreach (ConfigurationAttribute attribute in attributes) // { // //...... // } // ConfigurationChildElementCollection childElements = directory.ChildElements; // foreach (ConfigurationElement element in childElements) // { // //...... // } // string path = directory.Path; // string physicalPath = directory.PhysicalPath; // } //} ///// <summary> ///// 通过服务器 获取 应用程序池相关属性 ///// </summary> //public void ShowApppool() //{ // ServerManager server = new ServerManager(); // ApplicationPoolCollection applicationPools = server.ApplicationPools; // foreach (ApplicationPool pool in applicationPools) // { // bool autoStart = pool.AutoStart; // string runtime = pool.ManagedRuntimeVersion; // string appPoolName = pool.Name; // ProcessModelIdentityType identityType = pool.ProcessModel.IdentityType; // string userName = pool.ProcessModel.UserName; // string password = pool.ProcessModel.Password; // } //} #endregion
三、使用IIS常用操作辅助类对网站和应用程序池进行增删改查
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Web.Administration; namespace BaseUtil { public class IisHelper { /// <summary> /// 创建 应用程序池 /// </summary> /// <param name="poolName"></param> public static void CreateApppool(string poolName) { ServerManager server = new ServerManager(); ApplicationPool myApplicationPool = null; if (server.ApplicationPools != null && server.ApplicationPools.Count > 0) { if (server.ApplicationPools.FirstOrDefault(p => p.Name == poolName) == null) { myApplicationPool = server.ApplicationPools.FirstOrDefault(p => p.Name == poolName); } else { myApplicationPool = server.ApplicationPools.Add(poolName); } } else//不存在则创建 { myApplicationPool = server.ApplicationPools.Add(poolName); } if (myApplicationPool != null) { myApplicationPool.ProcessModel.IdentityType = ProcessModelIdentityType.NetworkService; //可以指定用户 //myApplicationPool.ProcessModel.IdentityType = ProcessModelIdentityType.SpecificUser; //myApplicationPool.ProcessModel.UserName = UserName; //myApplicationPool.ProcessModel.Password = Password; myApplicationPool.ManagedRuntimeVersion = "v4.0"; server.CommitChanges(); } } /// <summary> /// 应用程序池 是否已存在 /// </summary> /// <param name="poolName">应用程序池名称</param> /// <returns></returns> public static bool IsExistsAppPool(string poolName) { ServerManager server = new ServerManager(); if (server.ApplicationPools != null && server.ApplicationPools.Count > 0) { return server.ApplicationPools.FirstOrDefault(p => p.Name == poolName) != null; } return false; } /// <summary> /// 添加网站 /// </summary> /// <param name="siteName"></param> /// <param name="path">网址文件所在物理文件夹,如:@"c:\MySiteFolder\"</param> /// <param name="hostName">域名,任意则为*</param> /// <param name="apppoolName">应用程序池名称</param> /// <param name="ip">IP</param> /// <param name="port">端口</param> public static void CreateWebsite(string siteName, string path, string hostName, string apppoolName, string ip = "*", int port = 80) { ServerManager server = new ServerManager(); if (server.Sites != null && server.Sites.Count > 0) { if (server.Sites.FirstOrDefault(s => s.Name ==siteName) == null)//检查站点确实不存在 { string bindingInfo = string.Format(@"{0}:{1}:{2}", ip, port, hostName); Site site = server.Sites.Add(siteName, "http", bindingInfo, path); site.ApplicationDefaults.ApplicationPoolName = apppoolName; server.CommitChanges(); } } } /// <summary> /// 站点 是否已存在 /// </summary> /// <param name="siteName"></param> /// <returns></returns> public static bool IsExistsSite(string siteName) { ServerManager server = new ServerManager(); if (server.Sites != null && server.Sites.Count > 0) { return server.Sites.FirstOrDefault(s => s.Name == siteName) != null; } return false; } } }