首页 > 编程 > C# > 正文

C#操作IIS方法集合

2020-01-24 01:26:47
字体:
来源:转载
供稿:网友

C# 操作IIS方法集合
如果在win8,win7情况下报错:未知错误(0x80005000) ----见//www.VeVB.COm/article/72881.htm

using System;using System.Collections;using System.Collections.Generic;using System.DirectoryServices;using System.Linq;using System.Net;using System.Text;using System.Threading.Tasks;namespace IISControlHelper{  /// <summary>  /// IIS 操作方法集合  /// //www.VeVB.COm/article/72881.htm 错误  /// </summary>  public class IISWorker  {    private static string HostName = "localhost";    /// <summary>    /// 获取本地IIS版本    /// </summary>    /// <returns></returns>    public static string GetIIsVersion()    {      try      {        DirectoryEntry entry = new DirectoryEntry("IIS://" + HostName + "/W3SVC/INFO");        string version = entry.Properties["MajorIISVersionNumber"].Value.ToString();        return version;      }      catch (Exception se)      {        //说明一点:IIS5.0中没有(int)entry.Properties["MajorIISVersionNumber"].Value;属性,将抛出异常 证明版本为 5.0        return string.Empty;      }    }    /// <summary>    /// 创建虚拟目录网站    /// </summary>    /// <param name="webSiteName">网站名称</param>    /// <param name="physicalPath">物理路径</param>    /// <param name="domainPort">站点+端口,如192.168.1.23:90</param>    /// <param name="isCreateAppPool">是否创建新的应用程序池</param>    /// <returns></returns>    public static int CreateWebSite(string webSiteName, string physicalPath, string domainPort,bool isCreateAppPool)    {      DirectoryEntry root = new DirectoryEntry("IIS://" + HostName + "/W3SVC");      // 为新WEB站点查找一个未使用的ID      int siteID = 1;      foreach (DirectoryEntry e in root.Children)      {        if (e.SchemaClassName == "IIsWebServer")        {          int ID = Convert.ToInt32(e.Name);          if (ID >= siteID) { siteID = ID + 1; }        }      }      // 创建WEB站点      DirectoryEntry site = (DirectoryEntry)root.Invoke("Create", "IIsWebServer", siteID);      site.Invoke("Put", "ServerComment", webSiteName);      site.Invoke("Put", "KeyType", "IIsWebServer");      site.Invoke("Put", "ServerBindings", domainPort + ":");      site.Invoke("Put", "ServerState", 2);      site.Invoke("Put", "FrontPageWeb", 1);      site.Invoke("Put", "DefaultDoc", "Default.html");      // site.Invoke("Put", "SecureBindings", ":443:");      site.Invoke("Put", "ServerAutoStart", 1);      site.Invoke("Put", "ServerSize", 1);      site.Invoke("SetInfo");      // 创建应用程序虚拟目录      DirectoryEntry siteVDir = site.Children.Add("Root", "IISWebVirtualDir");      siteVDir.Properties["AppIsolated"][0] = 2;      siteVDir.Properties["Path"][0] = physicalPath;      siteVDir.Properties["AccessFlags"][0] = 513;      siteVDir.Properties["FrontPageWeb"][0] = 1;      siteVDir.Properties["AppRoot"][0] = "LM/W3SVC/" + siteID + "/Root";      siteVDir.Properties["AppFriendlyName"][0] = "Root";      if (isCreateAppPool)      {        DirectoryEntry apppools = new DirectoryEntry("IIS://" + HostName + "/W3SVC/AppPools");        DirectoryEntry newpool = apppools.Children.Add(webSiteName, "IIsApplicationPool");        newpool.Properties["AppPoolIdentityType"][0] = "4"; //4        newpool.Properties["ManagedPipelineMode"][0] = "0"; //0:集成模式 1:经典模式        newpool.CommitChanges();        siteVDir.Properties["AppPoolId"][0] = webSiteName;      }      siteVDir.CommitChanges();      site.CommitChanges();      return siteID;    }    /// <summary>    /// 得到网站的物理路径    /// </summary>    /// <param name="rootEntry">网站节点</param>    /// <returns></returns>    public static string GetWebsitePhysicalPath(DirectoryEntry rootEntry)    {      string physicalPath = "";      foreach (DirectoryEntry childEntry in rootEntry.Children)      {        if ((childEntry.SchemaClassName == "IIsWebVirtualDir") && (childEntry.Name.ToLower() == "root"))        {          if (childEntry.Properties["Path"].Value != null)          {            physicalPath = childEntry.Properties["Path"].Value.ToString();          }          else          {            physicalPath = "";          }        }      }      return physicalPath;    }    /// <summary>    /// 获取站点名    /// </summary>    public static List<IISInfo> GetServerBindings()    {      List<IISInfo> iisList = new List<IISInfo>();      string entPath = String.Format("IIS://{0}/w3svc", HostName);      DirectoryEntry ent = new DirectoryEntry(entPath);      foreach (DirectoryEntry child in ent.Children)      {        if (child.SchemaClassName.Equals("IIsWebServer", StringComparison.OrdinalIgnoreCase))        {          if (child.Properties["ServerBindings"].Value != null)          {            object objectArr = child.Properties["ServerBindings"].Value;            string serverBindingStr = string.Empty;            if (IsArray(objectArr))//如果有多个绑定站点时            {              object[] objectToArr = (object[])objectArr;              serverBindingStr = objectToArr[0].ToString();            }            else//只有一个绑定站点            {              serverBindingStr = child.Properties["ServerBindings"].Value.ToString();            }            IISInfo iisInfo = new IISInfo();            iisInfo.DomainPort = serverBindingStr;            iisInfo.AppPool = child.Properties["AppPoolId"].Value.ToString();//应用程序池            iisList.Add(iisInfo);          }        }      }      return iisList;    }    public static bool CreateAppPool(string appPoolName, string Username, string Password)    {      bool issucess = false;      try      {        //创建一个新程序池        DirectoryEntry newpool;        DirectoryEntry apppools = new DirectoryEntry("IIS://" + HostName + "/W3SVC/AppPools");        newpool = apppools.Children.Add(appPoolName, "IIsApplicationPool");        //设置属性 访问用户名和密码 一般采取默认方式        newpool.Properties["WAMUserName"][0] = Username;        newpool.Properties["WAMUserPass"][0] = Password;        newpool.Properties["AppPoolIdentityType"][0] = "3";        newpool.CommitChanges();        issucess = true;        return issucess;      }      catch // (Exception ex)       {        return false;      }    }    /// <summary>    /// 建立程序池后关联相应应用程序及虚拟目录    /// </summary>    public static void SetAppToPool(string appname,string poolName)    {      //获取目录      DirectoryEntry getdir = new DirectoryEntry("IIS://localhost/W3SVC");      foreach (DirectoryEntry getentity in getdir.Children)      {        if (getentity.SchemaClassName.Equals("IIsWebServer"))        {          //设置应用程序程序池 先获得应用程序 在设定应用程序程序池          //第一次测试根目录          foreach (DirectoryEntry getchild in getentity.Children)          {            if (getchild.SchemaClassName.Equals("IIsWebVirtualDir"))            {              //找到指定的虚拟目录.              foreach (DirectoryEntry getsite in getchild.Children)              {                if (getsite.Name.Equals(appname))                {                  //【测试成功通过】                  getsite.Properties["AppPoolId"].Value = poolName;                  getsite.CommitChanges();                }              }            }          }        }      }    }    /// <summary>    /// 判断object对象是否为数组    /// </summary>    public static bool IsArray(object o)    {      return o is Array;    }  }}

希望本文所述对大家的C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表