手机
当前位置:查字典教程网 >编程开发 >C#教程 >用C#操纵IIS(代码)
用C#操纵IIS(代码)
摘要:usingSystem;usingSystem.DirectoryServices;usingSystem.Collections;usin...

usingSystem;

usingSystem.DirectoryServices;

usingSystem.Collections;

usingSystem.Text.RegularExpressions;

usingSystem.Text;

/**

*@author吴海燕

*@emailwuhy80-usual@yahoo.com

*2004-6-25第一版

*/

namespaceWuhy.ToolBox

{

///<summary>

///这个类是静态类。用来实现管理IIS的基本操作。

///管理IIS有两种方式,一是ADSI,一是WMI。由于系统限制的原因,只好选择使用ADSI实现功能。

///这是一个遗憾。只有等到只有使用IIS6的时候,才有可能使用WMI来管理系统

///不过有一个问题就是,我现在也觉得这样的一个方法在本地执行会比较的好。最好不要远程执行。

///因为那样需要占用相当数量的带宽,即使要远程执行,也是推荐在同一个网段里面执行

///</summary>

publicclassIISAdminLib

{

#regionUserName,Password,HostName的定义

publicstaticstringHostName

{

get

{

returnhostName;

}

set

{

hostName=value;

}

}

publicstaticstringUserName

{

get

{

returnuserName;

}

set

{

userName=value;

}

}

publicstaticstringPassword

{

get

{

returnpassword;

}

set

{

if(UserName.Length<=1)

{

thrownewArgumentException("还没有指定好用户名。请先指定用户名");

}

password=value;

}

}

publicstaticvoidRemoteConfig(stringhostName,stringuserName,stringpassword)

{

HostName=hostName;

UserName=userName;

Password=password;

}

privatestaticstringhostName="localhost";

privatestaticstringuserName;

privatestaticstringpassword;

#endregion

#region根据路径构造Entry的方法

///<summary>

///根据是否有用户名来判断是否是远程服务器。

///然后再构造出不同的DirectoryEntry出来

///</summary>

///<paramname="entPath">DirectoryEntry的路径</param>

///<returns>返回的是DirectoryEntry实例</returns>

publicstaticDirectoryEntryGetDirectoryEntry(stringentPath)

{

DirectoryEntryent;

if(UserName==null)

{

ent=newDirectoryEntry(entPath);

}

else

{

//ent=newDirectoryEntry(entPath,HostName+""+UserName,Password,AuthenticationTypes.Secure);

ent=newDirectoryEntry(entPath,UserName,Password,AuthenticationTypes.Secure);

}

returnent;

}

#endregion

#region添加,删除网站的方法

///<summary>

///创建一个新的网站。根据传过来的信息进行配置

///</summary>

///<paramname="siteInfo">存储的是新网站的信息</param>

publicstaticvoidCreateNewWebSite(NewWebSiteInfositeInfo)

{

if(!EnsureNewSiteEnavaible(siteInfo.BindString))

{

thrownewDuplicatedWebSiteException("已经有了这样的网站了。"+Environment.NewLine+siteInfo.BindString);

}

stringentPath=String.Format("IIS://{0}/w3svc",HostName);

DirectoryEntryrootEntry=GetDirectoryEntry(entPath);

stringnewSiteNum=GetNewWebSiteID();

DirectoryEntrynewSiteEntry=rootEntry.Children.Add(newSiteNum,"IIsWebServer");

newSiteEntry.CommitChanges();

newSiteEntry.Properties["ServerBindings"].Value=siteInfo.BindString;

newSiteEntry.Properties["ServerComment"].Value=siteInfo.CommentOfWebSite;

newSiteEntry.CommitChanges();

DirectoryEntryvdEntry=newSiteEntry.Children.Add("root","IIsWebVirtualDir");

vdEntry.CommitChanges();

vdEntry.Properties["Path"].Value=siteInfo.WebPath;

vdEntry.CommitChanges();

}

///<summary>

///删除一个网站。根据网站名称删除。

///</summary>

///<paramname="siteName">网站名称</param>

publicstaticvoidDeleteWebSiteByName(stringsiteName)

{

stringsiteNum=GetWebSiteNum(siteName);

stringsiteEntPath=String.Format("IIS://{0}/w3svc/{1}",HostName,siteNum);

DirectoryEntrysiteEntry=GetDirectoryEntry(siteEntPath);

stringrootPath=String.Format("IIS://{0}/w3svc",HostName);

DirectoryEntryrootEntry=GetDirectoryEntry(rootPath);

rootEntry.Children.Remove(siteEntry);

rootEntry.CommitChanges();

}

#endregion

#regionStart和Stop网站的方法

publicstaticvoidStartWebSite(stringsiteName)

{

stringsiteNum=GetWebSiteNum(siteName);

stringsiteEntPath=String.Format("IIS://{0}/w3svc/{1}",HostName,siteNum);

DirectoryEntrysiteEntry=GetDirectoryEntry(siteEntPath);

siteEntry.Invoke("Start",newobject[]{});

}

publicstaticvoidStopWebSite(stringsiteName)

{

stringsiteNum=GetWebSiteNum(siteName);

stringsiteEntPath=String.Format("IIS://{0}/w3svc/{1}",HostName,siteNum);

DirectoryEntrysiteEntry=GetDirectoryEntry(siteEntPath);

siteEntry.Invoke("Stop",newobject[]{});

}

#endregion

#region确认网站是否相同

///<summary>

///确定一个新的网站与现有的网站没有相同的。

///这样防止将非法的数据存放到IIS里面去

///</summary>

///<paramname="bindStr">网站邦定信息</param>

///<returns>真为可以创建,假为不可以创建</returns>

publicstaticboolEnsureNewSiteEnavaible(stringbindStr)

{

stringentPath=String.Format("IIS://{0}/w3svc",HostName);

DirectoryEntryent=GetDirectoryEntry(entPath);

foreach(DirectoryEntrychildinent.Children)

{

if(child.SchemaClassName=="IIsWebServer")

{

if(child.Properties["ServerBindings"].Value!=null)

{

if(child.Properties["ServerBindings"].Value.ToString()==bindStr)

{

returnfalse;

}

}

}

}

returntrue;

}

#endregion

#region获取一个网站编号的方法

///<summary>

///获取一个网站的编号。根据网站的ServerBindings或者ServerComment来确定网站编号

///</summary>

///<paramname="siteName"></param>

///<returns>返回网站的编号</returns>

///<exceptioncref="NotFoundWebSiteException">表示没有找到网站</exception>

publicstaticstringGetWebSiteNum(stringsiteName)

{

Regexregex=newRegex(siteName);

stringtmpStr;

stringentPath=String.Format("IIS://{0}/w3svc",HostName);

DirectoryEntryent=GetDirectoryEntry(entPath);

foreach(DirectoryEntrychildinent.Children)

{

if(child.SchemaClassName=="IIsWebServer")

{

if(child.Properties["ServerBindings"].Value!=null)

{

tmpStr=child.Properties["ServerBindings"].Value.ToString();

if(regex.Match(tmpStr).Success)

{

returnchild.Name;

}

}

if(child.Properties["ServerComment"].Value!=null)

{

tmpStr=child.Properties["ServerComment"].Value.ToString();

if(regex.Match(tmpStr).Success)

{

returnchild.Name;

}

}

}

}

thrownewNotFoundWebSiteException("没有找到我们想要的站点"+siteName);

}

#endregion

#region获取新网站id的方法

///<summary>

///获取网站系统里面可以使用的最小的ID。

///这是因为每个网站都需要有一个唯一的编号,而且这个编号越小越好。

///这里面的算法经过了测试是没有问题的。

///</summary>

///<returns>最小的id</returns>

publicstaticstringGetNewWebSiteID()

{

ArrayListlist=newArrayList();

stringtmpStr;

stringentPath=String.Format("IIS://{0}/w3svc",HostName);

DirectoryEntryent=GetDirectoryEntry(entPath);

foreach(DirectoryEntrychildinent.Children)

{

if(child.SchemaClassName=="IIsWebServer")

{

tmpStr=child.Name.ToString();

list.Add(Convert.ToInt32(tmpStr));

}

}

list.Sort();

inti=1;

foreach(intjinlist)

{

if(i==j)

{

i++;

}

}

returni.ToString();

}

#endregion

}

#region新网站信息结构体

publicstructNewWebSiteInfo

{

privatestringhostIP;//TheHostsIPAddress

privatestringportNum;//TheNewWebSitesPort.generallyis"80"

privatestringdescOfWebSite;//网站表示。一般为网站的网站名。例如"www.dns.com.cn"

privatestringcommentOfWebSite;//网站注释。一般也为网站的网站名。

privatestringwebPath;//网站的主目录。例如"e:tmp"

publicNewWebSiteInfo(stringhostIP,stringportNum,stringdescOfWebSite,stringcommentOfWebSite,stringwebPath)

{

this.hostIP=hostIP;

this.portNum=portNum;

this.descOfWebSite=descOfWebSite;

this.commentOfWebSite=commentOfWebSite;

this.webPath=webPath;

}

publicstringBindString

{

get

{

returnString.Format("{0}:{1}:{2}",hostIP,portNum,descOfWebSite);

}

}

publicstringCommentOfWebSite

{

get

{

returncommentOfWebSite;

}

}

publicstringWebPath

{

get

{

returnwebPath;

}

}

}

#endregion

}

【用C#操纵IIS(代码)】相关文章:

用C#编写ActiveX控件(二)

使用VS2010 C#开发ActiveX控件(上)

C#中通过API实现的打印类 实例代码

C# IFF图形结构解析代码

C#数据结构之循环链表的实例代码

C#索引器简单实例代码

C#控制台输出进度和百分比的实例代码

C# jpg缩略图函数代码

C# 系统热键注册实现代码

使用C#调用系统API实现内存注入的代码

精品推荐
分类导航