iis使用:使用C#操作IIS



如何使用C#操作IIS很久的前就想写写这方面文章这次正好毕业做完有点时间我就有空静下心来写这文章在写本文前我首先花了时间写了操作IIS类(编译后也可以称的组件)步简化了操作源代码下篇将全部贴出来还有些测试有兴趣朋友可以到这里下载
.Net中实际上已经为我们在这方面做得很好了FCL中提供了不少类来帮助我们完成这项工作让我们开发工作变非常简单和快乐编程控制IIS实际上很简单和ASP.Net中需要使用ADSI来操作IIS但是此时我们不再需要GetObject这个东东了.Net为我们提供了更加强大功能新东东
.DirectoryServices命名空间中包括了些强大东东--DirectoryEntry,DirectoryEntries它们为我们提供了访问活动目录强大功能在这些类允许我们操作IIS、LDAP、NDS以及WinNT功能很强大吧:)
不过我们此处只谈IIS控制般来说我们操作IIS般都是对虚拟目录操作因此我将此列为主要内容来讲
首先我们要搞清楚IIS层次结构问题下面是我从国外找来张图很好解释了IIS层次结构:
[htmChina:Imageid=Image1|12][/htmChina:Image]
为了搞清楚IIS控制语法我们就必须搞清上图了解IIS元数据(Metabase)层次结构图中个节点称的Key,而每个Key可以包含个或多个值这些值就是我们说属性(properties)IIS元数据中Key和IIS中元素是相符因此元数据中属性值设定是会影响IIS中设置这就是我们编程基本思路和核心
另外还要了解下Schema这个概念它表示IIS中构架名称即可以理解IIS元数据中Key类型具体点说就是指每个结点类型我们知道IIS中有虚拟目录普通目录以及文件这些东东而这些都属于IIS元素区分他们标帜就是Schema比如虚拟目录Schema就是\"IIsVirtualDir\"普通目录就是\"IIsWebDir\"这样我们添加、删除目录时IIS就知道我们添加是虚拟目录还是普通目录
创建虚拟目录
DirectoryEntry是.Net给我们大礼物名字我们就知道他功能--目录入口使用过ADSI人都知道操作IISWinNT这些时我们还需要提供他们Path操作IIS时这个Path格式为:
IIS://ComputerName/Service/Website/Directory
ComputerName:即操作服务器名字可以是名字也可以是IP经常用就是localhost
Service:即操作服务器IIS中有Web也有FTP还有SMTP这些服务我们主要是操作IISWeb功能因此此处就是\"W3SVC\",如果是FTP则应是\"MSFTPSVC\"
WebSite:个IIS服务中可以包括很多站点这个就用于设置操作站点值是个数字默认是1表示缺省站点如果有其它则从1开始依次类推
Directory:不用说即操作目录名称个站点般顶层目录为\"ROOT\"其它目录则是他孩子(Child)
首先我们获取个站点顶层目录(根目录):
DirectoryEntryrootfolder=DirectoryEntry(\"IIS://localhost/W3SVC/1/ROOT\");
如果我们创建这个对象是没有发生异常则表示这个目录是真实存在 [Page]
下面我们来添加新虚拟目录比如我们要加是\"Aspcn\":
DirectoryEntryVirDir=rootfolder.Children.Add(\"Aspcn\",\"IIsWebVirtualDir\");
VirDir.Invoke(\"AppCreate\",true);
VirDir.CommitChanges;
rootfolder.CommitChanges;
 
创建目录思路很简单即在根目录子集(rootfolder.Children)中再添加条记录这里使用是DirectoryEntries类中Add思路方法它返回个DirectoryEntry表示新加入目录个参数是虚拟目录名字第 2个则是Schema类名以表明我们加入目录类型然后再使用DirectoryEntryInvoke思路方法ADSI中\"AppCreate\"思路方法将目录真正创建(似乎不走这步也可以创建目录成功但是为了保险起见大家还是用吧)最后便是依次新、根目录CommitChanges思路方法确认此次操作
在创建新目录时我们也可以同时给这个目录属性赋值但是我实战经验告诉我最好不要这样做如果创建时就赋值将有很多属性不能赋值成功比如重要表示真实目录Path属性因此飞刀建议大家最好是先创建目录然后再赋值即更新目录信息
更新虚拟目录
相信大家对IIS都比较熟悉了解IIS中些重要设置如可读(AccessRead)、可写(AccessWrite)、可执行(AccessExecute)等这些都可通过对DirectoryEntryProperties属性集合赋值来实现赋值可以通过两种方式来完成:
种是Properties集合Add思路方法如:
dir.Properties[\"AccessRead\"].Add(true);
第 2种是对第个索引值赋值:
dir.Properties[\"AccessRead\"][0]=true;
这两种思路方法都是可行具体是要看你喜好了
在进行赋值的前我们还是要确定要要赋值目标吧:)这里我们使用DirectoryEntries类Find思路方法如:
DirectoryEntryde=rootfolder.Children.Find(\"Aspcn\",\"IIsVirtualDir\");
找到了我们就可以赋值了赋值时定要好好看看啊虚拟目录属性值可以超多大堆:(太多了飞刀我也不重复了大家去微软站点上查:)
比较常用有:AccessRead,AccessWrite,AccessExecute,AccessScript,DefaultDoc,EnableDefaultDoc,Path


删除虚拟目录
删除虚拟目录思路方法也很简单就是找到你要删除虚拟目录然后AppDelete思路方法
DirectoryEntryde=rootfolder.Children.Find(\"Aspcn\",\"IIsVirtualDir\");
de.Invoke(\"AppDelete\",true);
rootfolder.CommitChanges;
 
还有种思路方法就是Root目录Delete思路方法 [Page]
objectparas=object[2];
paras[0]=\"IIsWebVirtualDir\";//表示操作是虚拟目录
paras[1]=\"Aspcn\";
rootfolder.Invoke(\"Delete\",paras);
rootfolder.CommitChanges;
喜欢哪种就看编程习惯了:))
有关我写
我写那个类库将这些进步简化了只需要下Connect思路方法就可直接操作CreateDelete思路方法了可以进步简化并且支持批量操作
Tags:  怎么使用iis 如何使用iis iis的使用 iis使用

延伸阅读

最新评论

发表评论