|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
语言是不是不是最重要的?iisusingSystem;
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: mp"
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
}
你觉得学习.NET怎么样,我懂的少,问的可能很幼稚,见笑了啊:) |
|