IIS站点管理类(c#)

简介: 代码 using System; using System.Collections.Generic; using System.Text; using System.DirectoryServices; using System.Text.RegularExpressions; using System.Collections;  namespace IISControlService {     /**////      /// 这个类是静态类。
img_405b18b4b6584ae338e0f6ecaf736533.gif 代码
using  System; 
using  System.Collections.Generic; 
using  System.Text; 
using  System.DirectoryServices; 
using  System.Text.RegularExpressions; 
using  System.Collections; 
 
namespace  IISControlService 

    
/**/ ///   <summary>  
    
///  这个类是静态类。用来实现管理IIS的基本操作。 
    
///   </summary>  
     public   class  IISManager 
    { 
        
#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   string  CreateNewWebSite(NewWebSiteInfo siteInfo) 
        { 
            
if  ( ! EnsureNewSiteEnavaible(siteInfo.BindString)) 
            { 
                
throw   new  SiteExistException( " 已经有了这样的网站了。 "   +   
                   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(); 
 
            
// 设置站点IP地址、端口、主机头 
            newSiteEntry.Properties[ " ServerBindings " ].Value  =  siteInfo.BindString; 
            
// 设置站点名称 
            newSiteEntry.Properties[ " ServerComment " ].Value  =  siteInfo.CommentOfWebSite; 
            
// 设置站点的访问权限 
            newSiteEntry.Properties[ " AccessFlags " ].Value  =   512   |   1
            newSiteEntry.CommitChanges(); 
 
            DirectoryEntry vdEntry 
=  newSiteEntry.Children.Add( " root " " IIsWebVirtualDir " ); 
            vdEntry.CommitChanges(); 
 
            
// 创建应用程序,并指定应用程序池为"HostPool","true"表示如果HostPool不存在,则自动创建 
            vdEntry.Invoke( " AppCreate3 " new   object []{  2 " HostPool " true  }); 
            vdEntry.Properties[
" Path " ].Value  =  siteInfo.WebPath; 
            
// 设置应用程序名称 
            vdEntry.Properties[ " AppFriendlyName " ].Value  =   " HostCreator "
            vdEntry.CommitChanges(); 
 
            
return  newSiteNum; 
        } 
 
        
/**/ ///   <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  Exception( " 没有找到我们想要的站点 "   +  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  
 
    
public   class  SiteExistException : Exception 
    { 
        
public  SiteExistException( string  message) :  base (message) { } 
    } 

 

 

目录
相关文章
|
4月前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
11天前
|
存储 C# 索引
C# 一分钟浅谈:数组与集合类的基本操作
【9月更文挑战第1天】本文详细介绍了C#中数组和集合类的基本操作,包括创建、访问、遍历及常见问题的解决方法。数组适用于固定长度的数据存储,而集合类如`List<T>`则提供了动态扩展的能力。文章通过示例代码展示了如何处理索引越界、数组长度不可变及集合容量不足等问题,并提供了解决方案。掌握这些基础知识可使程序更加高效和清晰。
44 2
|
10天前
|
C# 数据安全/隐私保护
C# 一分钟浅谈:类与对象的概念理解
【9月更文挑战第2天】本文从零开始详细介绍了C#中的类与对象概念。类作为一种自定义数据类型,定义了对象的属性和方法;对象则是类的实例,拥有独立的状态。通过具体代码示例,如定义 `Person` 类及其实例化过程,帮助读者更好地理解和应用这两个核心概念。此外,还总结了常见的问题及解决方法,为编写高质量的面向对象程序奠定基础。
13 2
|
1月前
|
C#
C#中的类和继承
C#中的类和继承
32 6
|
23天前
|
Java C# 索引
C# 面向对象编程(一)——类
C# 面向对象编程(一)——类
25 0
|
27天前
|
开发框架 .NET 编译器
C# 中的记录(record)类型和类(class)类型对比总结
C# 中的记录(record)类型和类(class)类型对比总结
|
3月前
|
开发框架 .NET 编译器
程序与技术分享:C#基础知识梳理系列三:C#类成员:常量、字段、属性
程序与技术分享:C#基础知识梳理系列三:C#类成员:常量、字段、属性
23 2
|
3月前
|
C#
C# 版本的 计时器类 精确到微秒 秒后保留一位小数 支持年月日时分秒带单位的输出
这篇2010年的文章是从别处搬运过来的,主要包含一个C#类`TimeCount`,该类有多个方法用于处理时间相关的计算。例如,`GetMaxYearCount`计算以毫秒为单位的最大年数,`GetCurrentTimeByMiliSec`将当前时间转换为毫秒,还有`SecondsToYYMMDDhhmmss`将秒数转换为年月日时分秒的字符串。此外,类中还包括一些辅助方法,如处理小数点后保留一位数字的`RemainOneFigureAfterDot`。
|
3月前
|
存储 安全 C#
C# 类的深入指南
C# 类的深入指南
|
4月前
|
C#
C#的类和对象的概念学习案例刨析
【5月更文挑战第17天】C#是一种面向对象的语言,以类和对象为核心。类作为对象的模板,定义了属性(如Name, Age)和行为(如Greet)。对象是类的实例,可设置属性值。封装通过访问修饰符隐藏实现细节,如Customer类的私有name字段通过Name属性访问。继承允许新类(如Employee)从现有类(Person)继承并扩展。多态让不同对象(如Circle, Square)共享相同接口(Shape),实现抽象方法Area,提供灵活的代码设计。
61 1