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) { } 
    } 

 

 

目录
相关文章
|
2天前
|
C#
C#学习相关系列之数据类型类的三大特性(二)
C#学习相关系列之数据类型类的三大特性(二)
|
2天前
|
C#
58.c#:directory类
58.c#:directory类
85 0
|
2天前
|
C#
57.c#:directorylnfo类
57.c#:directorylnfo类
16 0
|
2天前
|
监控 C#
55.c#:file类
55.c#:file类
76 1
|
2天前
|
算法 C#
54.c#:random类
54.c#:random类
89 1
|
2天前
|
C#
c# 所有类的最终基类:Object
c# 所有类的最终基类:Object
6 0
|
2天前
|
安全 C#
C#Webrequest类的使用
C#Webrequest类的使用
9 0
|
2天前
|
SQL 存储 C#
C# Web控件与数据感应之 TreeView 类
C# Web控件与数据感应之 TreeView 类
|
2天前
|
SQL 存储 Oracle
C# Web控件与数据感应之 CheckBoxList 类
C# Web控件与数据感应之 CheckBoxList 类
|
2天前
|
SQL 存储 Oracle
C# Web控件与数据感应之 Control 类
C# Web控件与数据感应之 Control 类