C#配置IIS搭建网站的工具类

 2023-09-16 阅读 19 评论 0

摘要:public class IISWorker{public static string HostName = "localhost";/// <summary>/// 获取本地IIS版本/// </summary>/// <returns></returns>public static string GetIIsVersion(){try{DirectoryEntry entry = new DirectoryE
public class IISWorker{public 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.0return 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站点查找一个未使用的IDint 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", "ServerBindings", "127.0.0.1:80:"+"poolcutwcf");site.Invoke("Put", "ServerState", 2);site.Invoke("Put", "FrontPageWeb", 1);site.Invoke("Put", "DefaultDoc", "Default.html");site.Invoke("Put", "SecureBindings", "127.0.0.1:443:abs-dit.goldenstand.cn");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";// 创建应用程序TaskProcessEngineDirectoryEntry de = siteVDir.Children.Add("TaskProcessEngine", siteVDir.SchemaClassName);de.CommitChanges();de.Properties["Path"].Value = physicalPath + "/TaskProcessEngine";de.Properties["AccessRead"][0] = true; // 勾选读取de.Invoke("AppCreate", true);de.Properties["EnableDefaultDoc"][0] = true;de.Properties["AccessScript"][0] = true; // 脚本资源访问de.Properties["DontLog"][0] = true; // 勾选记录访问de.Properties["ContentIndexed"][0] = true; // 勾选索引资源de.Properties["AppFriendlyName"][0] = "TaskProcessEngine"; //应用程序名de.Properties["AuthFlags"][0] = 5;if (isCreateAppPool){DirectoryEntry apppools = new DirectoryEntry("IIS://" + HostName + "/W3SVC/AppPools");//DirectoryEntry newpool = apppools.Children.Add(webSiteName, "IIsApplicationPool");DirectoryEntry newpool = apppools.Children.Add("TSSAppPool", "IIsApplicationPool");//newpool.Properties["AppPoolIdentityType"][0] = "4"; //4newpool.Properties["AppPoolIdentityType"][0] = "1"; //4newpool.Properties["ManagedPipelineMode"][0] = "0"; //0:集成模式 1:经典模式newpool.CommitChanges();//siteVDir.Properties["AppPoolId"][0] = webSiteName;siteVDir.Properties["AppPoolId"][0] = "TSSAppPool";}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.Properties["ManagedPipelineMode"][0] = "0"; //0:集成模式 1:经典模式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;}}public class IISInfo {public string DomainPort;public string AppPool;}

  将上面两个类复制到代码中,引入相关的包,然后调用类中的方法即可。

社交类网站的特点。 

转载自http://www.cnblogs.com/Gyoung/p/3574611.html

转载于:https://www.cnblogs.com/DM428/p/8687963.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/68744.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息