• C# 操作IIS -App & AppPools


      1 using System;
      2 using System.DirectoryServices;
      3 using System.Management;
      4 using Microsoft.Web.Administration;
      5 
      6 namespace ConsoleApplication_IsNullTest
      7 {
      8     /// <summary>
      9     /// IIS Helper.
     10     /// </summary>
     11     public class IISHelper
     12     {
     13 
     14         private static string siteName = "siteName";
     15         private static string sitePath = "sitePath";
     16         private static string serverId = "001";
     17         private static string runtimeVersion="v4.0";
     18 
     19         public static string RuntimeVersion
     20         {
     21             get { return runtimeVersion; }
     22         }
     23 
     24         public static DirectoryEntry iisSite = new DirectoryEntry("IIS://localhost/W3SVC", "UserName", "Userpwd");
     25 
     26         private static ManagementScope scope = null;
     27 
     28         public IISHelper()
     29         {
     30             scope = new ManagementScope("ConfigManager.ManagementScopePath");
     31             if (scope.IsConnected == false)
     32             {
     33                 scope.Connect();
     34             }
     35         }
     36 
     37         /// <summary>
     38         /// 创建应用程序池
     39         /// </summary>
     40         /// <param name="AppPoolName">程序池名</param>
     41         /// <param name="PipelineModel">Managed pipeline model.</param>
     42         public static void CreateAppPool(string AppPoolName, ManagedPipelineMode pipelineMode)
     43         {
     44             DirectoryEntry newpool;
     45             DirectoryEntry apppools = new DirectoryEntry("IIS://localhost/W3SVC/AppPools");
     46             newpool = apppools.Children.Add(AppPoolName, "IIsApplicationPool");
     47             newpool.Properties["ManagedRuntimeVersion"].Value = runtimeVersion;
     48             newpool.Properties["ManagedPipelineMode"].Value = ManagedPipelineMode.Integrated;
     49             newpool.CommitChanges();
     50         }
     51 
     52         /// <summary>
     53         /// 创建site
     54         /// </summary>
     55         public static void CreateWebSite(Object site)
     56         {
     57             ManagementObject manage = new ManagementObject(scope, new ManagementPath(@"IIsWebService='W3SVC'"), null);
     58             ManagementBaseObject inputParameters = manage.GetMethodParameters("CreateNewSite");
     59             ManagementBaseObject[] serverBinding = new ManagementBaseObject[1];
     60             serverBinding[0] = CreateServerBinding("", "127.0.0.1", "8081");
     61             inputParameters["ServerComment"] = siteName;
     62             inputParameters["ServerBindings"] = serverBinding;
     63             inputParameters["PathOfRootVirtualDir"] = sitePath;
     64             inputParameters["ServerId"] = serverId;
     65             try
     66             {
     67                 manage.InvokeMethod("CreateNewSite", inputParameters, null);
     68             }
     69             catch
     70             {
     71                 throw new Exception("createNewSite");
     72             }
     73             SetAppToPool(siteName, serverId);
     74 
     75             System.Threading.Thread.Sleep(3000);
     76 
     77             //启动web site
     78             string serverName = "W3SVC/" + serverId;
     79             ManagementObject manageSite = new ManagementObject(scope, new ManagementPath(@"IIsWebServer='" + serverName + "'"), null);
     80             manageSite.InvokeMethod("Start", null);
     81         }
     82 
     83         /// <summary>
     84         /// 关联应用程序池
     85         /// </summary>
     86         /// <param name="appPoolName"></param>
     87         /// <param name="serverId"></param>
     88         private static void SetAppToPool(string appPoolName, string serverId)
     89         {
     90             string path = string.Format("IIS://localhost/W3SVC/{0}/Root", serverId);
     91             DirectoryEntry entry = new DirectoryEntry(path);
     92             entry.Properties["AppPoolId"].Value = appPoolName;
     93             entry.CommitChanges();
     94             entry.Close();
     95         }
     96 
     97         /// <summary>
     98         /// Get site url前缀
     99         /// </summary>
    100         /// <param name="HostName"></param>
    101         /// <param name="IP"></param>
    102         /// <param name="Port"></param>
    103         /// <returns></returns>
    104         private static ManagementObject CreateServerBinding(string HostName, string IP, string Port)
    105         {
    106             try
    107             {
    108                 ManagementClass classBinding = new ManagementClass(scope, new ManagementPath("ServerBinding"), null);
    109                 ManagementObject serverBinding = classBinding.CreateInstance();
    110                 serverBinding.Properties["Hostname"].Value = HostName;
    111                 serverBinding.Properties["IP"].Value = IP;
    112                 serverBinding.Properties["Port"].Value = Port;
    113                 serverBinding.Put();
    114                 return serverBinding;
    115             }
    116             catch
    117             {
    118                 return null;
    119             }
    120         }
    121 
    122         /// <summary>
    123         /// 创建web site 子项的site $ 应用程序池
    124         /// </summary>
    125         /// <param name="site"></param>
    126         /// <param name="serviceName"></param>
    127         /// <param name="AppolName"></param>
    128         public static void CreateApplication(Object site, string serviceName, string AppolName)
    129         {
    130             DirectoryEntry defaultWebSite = GetWebisteDirectory("FUSiteName");//父级site name
    131             if (defaultWebSite != null)
    132             {
    133                 DirectoryEntry defaultWebSiteRoot = new DirectoryEntry(defaultWebSite.Path + "/Root");
    134 
    135                 //Create and setup new virtual directory
    136                 DirectoryEntry virtualDirectory = defaultWebSiteRoot.Children.Add(siteName, "IIsWebVirtualDir");
    137 
    138                 virtualDirectory.Properties["Path"][0] = sitePath;
    139                 virtualDirectory.Properties["AppFriendlyName"][0] = siteName;
    140                 virtualDirectory.CommitChanges();
    141 
    142                 virtualDirectory.Invoke("AppCreate", 1);
    143                 object[] param = { 0, siteName, true };
    144                 virtualDirectory.Invoke("AppCreate3", param);
    145                 virtualDirectory.Properties["AppPoolId"].Value = AppolName;
    146 
    147                 string appPoolPath = @"IIS://localhost/W3SVC/AppPools/" + AppolName;
    148                 try
    149                 {
    150                     var appPoolEntry = new DirectoryEntry(appPoolPath);
    151                     appPoolEntry.Properties["ManagedRuntimeVersion"].Value = runtimeVersion;
    152                     appPoolEntry.Properties["ManagedPipelineMode"].Value = ManagedPipelineMode.Integrated;
    153                     appPoolEntry.Invoke("SetInfo", null);
    154                     appPoolEntry.CommitChanges();
    155                     appPoolEntry.Close();
    156                 }
    157                 catch
    158                 {
    159 
    160                 }
    161                 virtualDirectory.CommitChanges();
    162                 virtualDirectory.Close();
    163             }
    164         }
    165 
    166 
    167         /// <summary>
    168         /// Get web site directory.
    169         /// </summary>
    170         /// <param name="websiteName"></param>
    171         /// <returns></returns>
    172         private static DirectoryEntry GetWebisteDirectory(string websiteName)
    173         {
    174             DirectoryEntries des = iisSite.Children;
    175             foreach (DirectoryEntry sub in des)
    176             {
    177                 if (sub.SchemaClassName == "IIsWebServer" && sub.Properties["ServerComment"].Contains(websiteName.Trim()))
    178                 {
    179 
    180                     return sub;
    181                 }
    182             }
    183             return null;
    184         }
    185     }
    186 }
  • 相关阅读:
    面试问题记录-C++
    面试问题记录-网络
    二叉树
    75. Sort Colors 荷兰国旗问题
    桶排序
    数据结构-堆
    快速排序
    第六章 数据库原理
    第五章 Java Web
    第四章 java基础知识
  • 原文地址:https://www.cnblogs.com/lierle/p/3056754.html
Copyright © 2020-2023  润新知