在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
虽然在IIS 6.0时代我们也可以非常轻松地通过C#来管理服务器的IIS,但相对来说,现在需要编写的代码更少,所能完成的功能更强。以下是我在曾经做的一个项目中所写的一个类库中的一部分,主要实现了对IIS 7.0的操作,包括创建和删除站点、创建和删除虚拟目录、创建和删除应用程序池、添加站点默认文档、判断站点和虚拟目录是否存在、以及检查Bindings信息等。 首先是对站点的管理。我写了一个相对较为通用的私有方法,然后在对外的方法中给出了调用接口,包括了创建站点时应用程序池的创建和权限的管理。
CreateSite
/// <summary> /// Create a new web site. /// </summary> /// <param name="siteName"></param> /// <param name="bindingInfo">"*:<port>:<hostname>" <example>"*:80:myhost.com"</example></param> /// <param name="physicalPath"></param> public static void CreateSite(string siteName, string bindingInfo, string physicalPath) { createSite(siteName, "http", bindingInfo, physicalPath, true, siteName + "Pool", ProcessModelIdentityType.NetworkService, null, null, ManagedPipelineMode.Integrated, null); } private static void createSite(string siteName, string protocol, string bindingInformation, string physicalPath, bool createAppPool, string appPoolName, ProcessModelIdentityType identityType, string appPoolUserName, string appPoolPassword, ManagedPipelineMode appPoolPipelineMode, string managedRuntimeVersion) { using (ServerManager mgr = new ServerManager()) { Site site = mgr.Sites.Add(siteName, protocol, bindingInformation, physicalPath); // PROVISION APPPOOL IF NEEDED if (createAppPool) { ApplicationPool pool = mgr.ApplicationPools.Add (appPoolName); if (pool.ProcessModel.IdentityType != identityType) { pool.ProcessModel.IdentityType = identityType; } if (!String.IsNullOrEmpty(appPoolUserName)) { pool.ProcessModel.UserName = appPoolUserName; pool.ProcessModel.Password = appPoolPassword; } if (appPoolPipelineMode != pool.ManagedPipelineMode) { pool.ManagedPipelineMode = appPoolPipelineMode; } site.Applications["/"].ApplicationPoolName = pool.Name; } mgr.CommitChanges(); } } 这个是删除站点的方法,比较简单。
DeleteSite
/// <summary> /// Delete an existent web site. /// </summary> /// <param name="siteName">Site name.</param> public static void DeleteSite(string siteName) { using (ServerManager mgr = new ServerManager()) { Site site = mgr.Sites[siteName]; if (site != null) { mgr.Sites.Remove(site); mgr.CommitChanges(); } } } 后是对虚拟目录的操作,包括创建和删除虚拟目录,都比较简单。
CreateVDir
public static void CreateVDir(string siteName, string vDirName, string physicalPath) { using (ServerManager mgr = new ServerManager()) { Site site = mgr.Sites[siteName]; if (site == null) { throw new ApplicationException(String.Format ("Web site {0} does not exist", siteName)); } site.Applications.Add("/" + vDirName, physicalPath); mgr.CommitChanges(); } } DeleteVDir public static void DeleteVDir(string siteName, string vDirName) { using (ServerManager mgr = new ServerManager()) { Site site = mgr.Sites[siteName]; if (site != null) { Microsoft.Web.Administration.Application app = site.Applications["/" + vDirName]; if (app != null) { site.Applications.Remove(app); mgr.CommitChanges(); } } } } 删除应用程序池。
DeletePool
/// <summary> /// Delete an existent web site app pool. /// </summary> /// <param name="appPoolName"> App pool name for deletion.</param> public static void DeletePool(string appPoolName) { using (ServerManager mgr = new ServerManager()) { ApplicationPool pool = mgr.ApplicationPools[appPoolName]; if (pool != null) { mgr.ApplicationPools.Remove(pool); mgr.CommitChanges(); } } } 在站点上添加默认文档。
AddDefaultDocument
public static void AddDefaultDocument (string siteName, string defaultDocName) { using (ServerManager mgr = new ServerManager()) { Configuration cfg = mgr.GetWebConfiguration (siteName); ConfigurationSection defaultDocumentSection = cfg.GetSection("system.webServer/defaultDocument"); ConfigurationElement filesElement = defaultDocumentSection.GetChildElement("files"); ConfigurationElementCollection filesCollection = filesElement.GetCollection(); foreach (ConfigurationElement elt in filesCollection) { if (elt.Attributes["value"].Value.ToString() == defaultDocName) { return; } } try { ConfigurationElement docElement = filesCollection.CreateElement(); docElement.SetAttributeValue("value", defaultDocName); filesCollection.Add(docElement); } catch (Exception) { } //this will fail if existing mgr.CommitChanges(); } }
VerifyVirtualPathIsExist
public static bool VerifyVirtualPathIsExist(string siteName, string path) { using (ServerManager mgr = new ServerManager()) { Site site = mgr.Sites[siteName]; if (site != null) { foreach (Microsoft.Web.Administration.Application app in site.Applications) { if (app.Path.ToUpper().Equals(path.ToUpper())) { return true; } } } } return false; } 检查站点是否存在。
VerifyWebSiteIsExist
public static bool VerifyWebSiteIsExist(string siteName) { using (ServerManager mgr = new ServerManager()) { for (int i = 0; i < mgr.Sites.Count; i++) { if (mgr.Sites[i].Name.ToUpper().Equals(siteName.ToUpper())) { return true; } } } return false; } 检查Bindings信息。
VerifyWebSiteBindingsIsExist
public static bool VerifyWebSiteBindingsIsExist(string bindingInfo) { string temp = string.Empty; using (ServerManager mgr = new ServerManager()) { for (int i = 0; i < mgr.Sites.Count; i++) { foreach (Microsoft.Web.Administration.Binding b in mgr.Sites[i].Bindings) { temp = b.BindingInformation; if (temp.IndexOf('*') < 0) { temp = "*" + temp; } if (temp.Equals(bindingInfo)) { return true; } } } } return false; } 以上代码均在Windows Vista SP1和Windows Server 2008上测试通过,使用时需要在工程中引用Microsoft.Web.Administration类库,该类库为IIS 7.0自带的。 |
请发表评论