源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

用C#操纵IIS(代码)

  • 时间:2022-12-05 02:41 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:用C#操纵IIS(代码)
using System;  using System.DirectoryServices;  using System.Collections;  using System.Text.RegularExpressions;  using System.Text;  /**   * @author 吴海燕   * @email  wuhy80-usual@yahoo.com   * 2004-6-25 第一版   */   namespace Wuhy.ToolBox  {       /// <summary>       ///  这个类是静态类。用来实现管理IIS的基本操作。       ///  管理IIS有两种方式,一是ADSI,一是WMI。由于系统限制的原因,只好选择使用ADSI实现功能。       ///  这是一个遗憾。只有等到只有使用IIS 6的时候,才有可能使用WMI来管理系统       ///  不过有一个问题就是,我现在也觉得这样的一个方法在本地执行会比较的好。最好不要远程执行。       ///  因为那样需要占用相当数量的带宽,即使要远程执行,也是推荐在同一个网段里面执行       /// </summary>       public class IISAdminLib       {            #region UserName,Password,HostName的定义           public static string HostName           {                get                {                     return hostName;                }                set                {                     hostName = value;                }           }           public static string UserName           {                get                {                     return userName;                }                set                {                     userName = value;                }           }           public static string Password           {                get                {                     return password;                }                set                {                     if(UserName.Length <= 1)                     {                         throw new ArgumentException("还没有指定好用户名。请先指定用户名");                     }                     password = value;                }           }           public static void RemoteConfig(string hostName, string userName, string password)           {                HostName = hostName;                UserName = userName;                Password = password;           }            private static string hostName = "localhost";            private static string userName;            private static string password;            #endregion            #region 根据路径构造Entry的方法           /// <summary>           ///  根据是否有用户名来判断是否是远程服务器。           ///  然后再构造出不同的DirectoryEntry出来           /// </summary>           /// <param name="entPath">DirectoryEntry的路径</param>           /// <returns>返回的是DirectoryEntry实例</returns>           public static DirectoryEntry GetDirectoryEntry(string entPath)           {                DirectoryEntry ent;                if(UserName == null)                {                     ent = new DirectoryEntry(entPath);                }                else                {                     //    ent = new DirectoryEntry(entPath, HostName+"\\"+UserName, Password, AuthenticationTypes.Secure);                     ent = new DirectoryEntry(entPath, UserName, Password, AuthenticationTypes.Secure);                }                return ent;           }            #endregion            #region 添加,删除网站的方法           /// <summary>           ///  创建一个新的网站。根据传过来的信息进行配置           /// </summary>           /// <param name="siteInfo">存储的是新网站的信息</param>           public static void CreateNewWebSite(NewWebSiteInfo siteInfo)           {                if(! EnsureNewSiteEnavaible(siteInfo.BindString))                {                     throw new DuplicatedWebSiteException("已经有了这样的网站了。" + Environment.NewLine + siteInfo.BindString);                }                string entPath = String.Format("IIS://{0}/w3svc", HostName);                DirectoryEntry rootEntry = GetDirectoryEntry(entPath);                string newSiteNum = GetNewWebSiteID();                DirectoryEntry newSiteEntry = rootEntry.Children.Add(newSiteNum, "IIsWebServer");                newSiteEntry.CommitChanges();                newSiteEntry.Properties["ServerBindings"].Value = siteInfo.BindString;                newSiteEntry.Properties["ServerComment"].Value = siteInfo.CommentOfWebSite;                newSiteEntry.CommitChanges();                DirectoryEntry vdEntry = newSiteEntry.Children.Add("root", "IIsWebVirtualDir");                vdEntry.CommitChanges();                vdEntry.Properties["Path"].Value = siteInfo.WebPath;                vdEntry.CommitChanges();           }           /// <summary>           ///  删除一个网站。根据网站名称删除。           /// </summary>           /// <param name="siteName">网站名称</param>           public static void DeleteWebSiteByName(string siteName)           {                string siteNum = GetWebSiteNum(siteName);                string siteEntPath = String.Format("IIS://{0}/w3svc/{1}", HostName, siteNum);                DirectoryEntry siteEntry = GetDirectoryEntry(siteEntPath);                string rootPath = String.Format("IIS://{0}/w3svc", HostName);                DirectoryEntry rootEntry = GetDirectoryEntry(rootPath);                rootEntry.Children.Remove(siteEntry);                rootEntry.CommitChanges();           }            #endregion            #region Start和Stop网站的方法           public static void StartWebSite(string siteName)           {                string siteNum = GetWebSiteNum(siteName);                string siteEntPath = String.Format("IIS://{0}/w3svc/{1}", HostName, siteNum);                DirectoryEntry siteEntry = GetDirectoryEntry(siteEntPath);                siteEntry.Invoke("Start", new object[] {});           }           public static void StopWebSite(string siteName)           {                string siteNum = GetWebSiteNum(siteName);                string siteEntPath = String.Format("IIS://{0}/w3svc/{1}", HostName, siteNum);                DirectoryEntry siteEntry = GetDirectoryEntry(siteEntPath);                siteEntry.Invoke("Stop", new object[] {});           }            #endregion            #region 确认网站是否相同           /// <summary>           ///  确定一个新的网站与现有的网站没有相同的。           ///  这样防止将非法的数据存放到IIS里面去           /// </summary>           /// <param name="bindStr">网站邦定信息</param>           /// <returns>真为可以创建,假为不可以创建</returns>           public static bool EnsureNewSiteEnavaible(string bindStr)           {                string entPath = String.Format("IIS://{0}/w3svc", HostName);                DirectoryEntry ent = GetDirectoryEntry(entPath);                foreach(DirectoryEntry child in ent.Children)                {                     if(child.SchemaClassName == "IIsWebServer")                     {                          if(child.Properties["ServerBindings"].Value != null)                         {                              if(child.Properties["ServerBindings"].Value.ToString() == bindStr)                              {                                   return false;                              }                         }                     }                }                return true;           }            #endregion            #region 获取一个网站编号的方法           /// <summary>           ///  获取一个网站的编号。根据网站的ServerBindings或者ServerComment来确定网站编号           /// </summary>           /// <param name="siteName"></param>           /// <returns>返回网站的编号</returns>           /// <exception cref="NotFoundWebSiteException">表示没有找到网站</exception>           public static string GetWebSiteNum(string siteName)           {                Regex regex = new Regex(siteName);                string tmpStr;                string entPath = String.Format("IIS://{0}/w3svc", HostName);                DirectoryEntry ent = GetDirectoryEntry(entPath);                foreach(DirectoryEntry child in ent.Children)                {                     if(child.SchemaClassName == "IIsWebServer")                     {                          if(child.Properties["ServerBindings"].Value != null)                         {                              tmpStr = child.Properties["ServerBindings"].Value.ToString();                              if(regex.Match(tmpStr).Success)                              {                                   return child.Name;                              }                         }                          if(child.Properties["ServerComment"].Value != null)                         {                              tmpStr = child.Properties["ServerComment"].Value.ToString();                              if(regex.Match(tmpStr).Success)                              {                                   return child.Name;                              }                         }                     }                }                throw new NotFoundWebSiteException("没有找到我们想要的站点" + siteName);           }            #endregion            #region 获取新网站id的方法           /// <summary>           ///  获取网站系统里面可以使用的最小的ID。           ///  这是因为每个网站都需要有一个唯一的编号,而且这个编号越小越好。           ///  这里面的算法经过了测试是没有问题的。           /// </summary>           /// <returns>最小的id</returns>           public static string GetNewWebSiteID()           {                ArrayList list = new ArrayList();                string tmpStr;                string entPath = String.Format("IIS://{0}/w3svc", HostName);                DirectoryEntry ent = GetDirectoryEntry(entPath);                foreach(DirectoryEntry child in ent.Children)                {                     if(child.SchemaClassName == "IIsWebServer")                     {                         tmpStr = child.Name.ToString();                          list.Add(Convert.ToInt32(tmpStr));                     }                }                list.Sort();                int i = 1;                foreach(int j in list)                {                     if(i == j)                     {                         i++;                     }                }                return i.ToString();           }            #endregion       }       #region 新网站信息结构体       public struct NewWebSiteInfo       {            private string hostIP;   // The Hosts IP Address            private string portNum;   // The New Web Sites Port.generally is "80"            private string descOfWebSite; // 网站表示。一般为网站的网站名。例如"www.dns.com.cn"            private string commentOfWebSite;// 网站注释。一般也为网站的网站名。            private string webPath;   // 网站的主目录。例如"e:\tmp"           public NewWebSiteInfo(string hostIP, string portNum, string descOfWebSite, string commentOfWebSite, string webPath)           {                this.hostIP = hostIP;                this.portNum = portNum;                this.descOfWebSite = descOfWebSite;                this.commentOfWebSite = commentOfWebSite;                this.webPath = webPath;           }           public string BindString           {                get                {                     return String.Format("{0}:{1}:{2}", hostIP, portNum, descOfWebSite);                }           }           public string CommentOfWebSite           {                get                {                     return commentOfWebSite;                }           }           public string WebPath           {                get                {                     return webPath;                }           }       }       #endregion  } 
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部