C#實現(xiàn)動態(tài)發(fā)布創(chuàng)建IIS站點幫助類(設(shè)置應(yīng)用程序池、網(wǎng)站、訪問端口、兼容32位等)
當(dāng)前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
準(zhǔn)備工作: 1、引用 System.DirectoryServices 系統(tǒng)程序集 2、引用 Microsoft.Web.Administration 程序集,類庫位置在 C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll ,直接拷貝到項目引用即可 3、調(diào)用方式: string bing = string.Format("{0}:{1}:{2}", item.BingIp, item.Port, item.BingAddr); bool result = IISManager.CreateWebSite(item.SiteName, filePath, bing); 4、源碼: public class IISManager { /// <summary> /// 創(chuàng)建一個站點 /// </summary> /// <param name="name">站點名稱</param> /// <param name="physicalPath">項目所在路徑</param> /// <param name="bindingInformation">綁定信息</param> /// <param name="bindingProtocol">類型,默認(rèn)http</param> /// <returns></returns> public static bool CreateWebSite(string name, string physicalPath, string bindingInformation = "*:80:", string bindingProtocol = "http") { try { ServerManager manager = new ServerManager(); //判斷應(yīng)用程序池是否存在 if (manager.ApplicationPools[name] != null) { manager.ApplicationPools.Remove(manager.ApplicationPools[name]); } //判斷web應(yīng)用程序是否存在 if (manager.Sites[name] != null) { manager.Sites.Remove(manager.Sites[name]); } manager.Sites.Add(name, bindingProtocol, bindingInformation, physicalPath); //添加web應(yīng)用程序池 ApplicationPool pool = manager.ApplicationPools.Add(name); //設(shè)置web應(yīng)用程序池的Framework版本 pool.ManagedRuntimeVersion = "v4.0"; //設(shè)置是否啟用32位應(yīng)用程序 pool.SetAttributeValue("enable32BitAppOnWin64", true); //設(shè)置web網(wǎng)站的應(yīng)用程序池 manager.Sites[name].Applications[0].ApplicationPoolName = name; manager.CommitChanges(); return true; } catch (Exception e) { return false; } } /// <summary> /// 創(chuàng)建一個站點 /// </summary> /// <param name="name">站點名稱</param> /// <param name="physicalPath">項目所在路徑</param> /// <param name="port">端口號</param> /// <returns></returns> public static bool CreateWebSite(string name, string physicalPath, int port = 80) { try { ServerManager manager = new ServerManager(); //判斷應(yīng)用程序池是否存在 if (manager.ApplicationPools[name] != null) { manager.ApplicationPools.Remove(manager.ApplicationPools[name]); } //判斷web應(yīng)用程序是否存在 if (manager.Sites[name] != null) { manager.Sites.Remove(manager.Sites[name]); } manager.Sites.Add(name, physicalPath, port); //添加web應(yīng)用程序池 ApplicationPool pool = manager.ApplicationPools.Add(name); //設(shè)置web應(yīng)用程序池的Framework版本 pool.ManagedRuntimeVersion = "v4.0"; //設(shè)置是否啟用32位應(yīng)用程序 pool.SetAttributeValue("enable32BitAppOnWin64", true); //設(shè)置web網(wǎng)站的應(yīng)用程序池 manager.Sites[name].Applications[0].ApplicationPoolName = name; manager.CommitChanges(); return true; } catch (Exception e) { return false; } } /// <summary> /// 創(chuàng)建虛擬目錄 /// </summary> /// <param name="vDirName">虛擬目錄名稱</param> /// <param name="path">實際路徑</param> /// <param name="iAuth">設(shè)置目錄的安全性 0-不允許匿名訪問,1-為允許,2-基本身份驗證,3-允許匿名+基本身份驗證,4-整合Windows驗證,5-允許匿名+整合Windows驗證</param> /// <param name="serverName">默認(rèn)localhost</param> /// <returns></returns> public static bool CreateVirtualDirectory(string vDirName, string path, int iAuth = 1, string serverName = "localhost") { try { // 確定IIS版本 DirectoryEntry iisSchema = new DirectoryEntry("IIS://" + serverName + "/Schema/AppIsolated"); bool iisUnderNt = iisSchema.Properties["Syntax"].Value.ToString().ToUpper() == "BOOLEAN"; iisSchema.Dispose(); // 獲得管理權(quán)限 DirectoryEntry iisAdmin = new DirectoryEntry("IIS://" + serverName + "/W3SVC/1/Root"); // 如果虛擬目錄已經(jīng)存在則刪除 foreach (DirectoryEntry v in iisAdmin.Children) { if (v.Name == vDirName) { try { iisAdmin.Invoke("Delete", new object[] { v.SchemaClassName, vDirName }); iisAdmin.CommitChanges(); } catch (Exception ex) { return false; } } } // 創(chuàng)建一個虛擬目錄 DirectoryEntry vDir = iisAdmin.Children.Add(vDirName, "IIsWebVirtualDir"); // 創(chuàng)建一個web應(yīng)用 vDir.Invoke("AppCreate", !iisUnderNt); //應(yīng)用程序名稱 vDir.Properties["AppFriendlyName"][0] = vDirName; //設(shè)置讀取權(quán)限 vDir.Properties["AccessRead"][0] = true; //值 true 表示不論文件類型是什么,文件或文件夾的內(nèi)容都可以執(zhí)行 vDir.Properties["AccessExecute"][0] = false; //值 true 表示允許用戶將文件及其相關(guān)屬性上載到服務(wù)器上已啟用的目錄中,或者更改可寫文件的內(nèi)容。 //只有使用支持 HTTP 1.1 協(xié)議標(biāo)準(zhǔn)的 PUT 功能的瀏覽器,才能執(zhí)行寫入操作 vDir.Properties["AccessWrite"][0] = false; //值 true 表示如果是腳本文件或靜態(tài)內(nèi)容,則可以執(zhí)行文件或文件夾的內(nèi)容。值 false 只允許提供靜態(tài)文件,如 HTML 文件 vDir.Properties["AccessScript"][0] = true; //設(shè)置為 true 時,瀏覽目錄時系統(tǒng)會加載該目錄的默認(rèn)文檔(由 De, faultDoc 屬性指定) vDir.Properties["EnableDefaultDoc"][0] = true; //設(shè)置為 true 時,將啟用目錄瀏覽 vDir.Properties["EnableDirBrowsing"][0] = false; //包含一個或多個默認(rèn)文檔的文件名,如果在客戶端的請求中不包含文件名,將把默認(rèn)文檔的文件名返回給客戶端 vDir.Properties["DefaultDoc"][0] = "login.html,index.html,default.html,Default.aspx,index.aspx"; //項目路徑 vDir.Properties["Path"][0] = path; //作為有效方案返回給客戶端的 Windows 驗證方案的設(shè)置 vDir.Properties["AuthFlags"][0] = iAuth; // NT格式不支持這特性 if (!iisUnderNt) { //頁面是否允許當(dāng)前目錄的相對路徑(使用 ..\ 表示法) vDir.Properties["AspEnableParentPaths"][0] = true; } // 設(shè)置改變 vDir.CommitChanges(); return true; } catch (Exception ex) { return false; } } } DirectoryEntry vDir = iisAdmin.Children.Add(vDirName, "IIsWebVirtualDir"); 該文章在 2021/1/30 9:27:58 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |