|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
对用户来说可预见费用、节约费用,可以做到花少钱办大事。由于省去了购买软件和硬件等的前期费用,用户可以租用较高级的应用软件。ASP的收费是根据软件的类型、客制化程度、用户数量、服务期限来定的,对客户来说这笔费用是可以预见的。方便于客户应用软件的升级。办理|成绩
利用ASP开辟NT目次服务会呈现的一些成绩(I)
有关ADSI的材料真是难找,手艺固然很好,惋惜300多页的SDK我可真看不动如果哪位年夜侠有空的话,可以帮我翻译就行了,呵呵。
如今只好迁就着翻译一些短小的文章了,哎。匆仓促之间翻译成的,毛病一定很多,还但愿人人体谅。
利用到的手艺仍是我后面提到的ADSI,这一节的重点放在利用目次树上。
目次服务(DN)在贯串了全部NT范畴。几近每个办理义务终极城市往改动体系目次中的某一个目次。象到场新用户到组内里,新建一个
互联网网站,或则更新电子邮件目次等等。注重的是,Windows2000的举动目次已撑持这个手艺。
微软已供应了一些功效很壮大的COM接口来会见分歧的目次服务。
ADS定名空间和provider
ADSprovider的观点和ODBC布局很相象,比方Oracle的ODBC驱动器让一台呆板毗连到Oracle的数据库中,可是这其实不意味着这个数据库的确存在。
一样的干系也利用与ADSI,它是一个合用与分歧的目次定名空间的大众接口。
大概这个目次定名空间存在与收集中。
在一个典范的服务器上,当安装了准确的工具箱后,你会找到三个ADSprovider
他们是:
WinNT:-给NT及其收集用的
IIS:-给IIS用的
LDAP:-给MSExchange和Windows200的举动目次用的
大概你还会发明上面的provider
NWCOMPAT:-给Novell3.1用的
NDS:-给NovellDirectoryServices用的
每个定名空间工具都由目次服务的根节点集构成,典范的例子是
NT的domain大概server,但不是一切的provider都可以主动发明根目次节点。
你可以绑定到一个WinNT:工具上它会供应一个NT域列表
可是关于IIS和LDAP的定名空间工具,则既没有IIS也没有MSExchange的根节点.
在利用的时分而必需要被指明。
容器,会员,汇合
关于年夜部分而言,目次是一个分层目次布局的工具同时它还包涵了其他的工具
举例来讲,一个物理的IIS服务器有多个网站,每一个网站还能够有多个目次(
或则网站的使用程序),而这些目次另有子目次。
一个NT的domain可以有多个服务器等等。
在ADSI术语中,一切下面的容器工具又包涵别的工具,就构成了定名空间树。
典范的代码以下:
SetoAds=GetObject("WinNT://MyDomain")
ForEachoAdsChildinoAds
dosomething
Next
分层目次模子其实不可以完整形貌工具之间的干系。一般而言,NT的用户和组工具
束缚与Domain和Server工具,可是他们之间又有一个附加的会员干系。
ADSI工具模子经由过程.Groups和.Menmbers属性来暗示会员干系
比方一个典范的列表以下:
SetoAds=GetObject("WinNT://MyDomain/Administrator")
ForEachoAdsGroupinoAds.Groups
dosomething
Next
...
SetoAds=GetObject("WinNT://MyDomain/DomainUsers")
ForEachoAdsMemberinoAds.Members
dosomething
Next
细心察看下面的代码的奇妙的分歧的地方
对一个工具自己实行列表,将前往它的子层。
对一个工具的.Member属性实行列表将前往它的会员列表。
最初,另有一些静态汇合来暗示那些临时自力的工具。
一个典范的例子是在打印行列中的义务.PrintJobs汇合
Schema工具
每一个ADS工具都接洽在一个SCHEMA工具,来暗示它的功能和特性
我们在写代码的时分常常碰着如许的成绩:我的工具究竟撑持那些属性
这是一个容器工具,或则工具有大概包括甚么样的范例。
比方,在准绳上,一个目次服务自己就是一个完全的SCHEMA工具。
筹办运转程序
这个ADS扫瞄程序必要有必定的平安权限才干够运转。
拷贝这个ADS扫瞄文件到你的收集中的一个共享的目次中
映照一个假造的web目次
指派这个目次有办理者的权限。
看一看定名空间树
在这里利用了微软的HtmlHelpJavaapplet.
它可以发生我们必要的树状布局。尤其主要的是它可以供应对子树的撑持
由于我其实不乐意拿我的全部目次树来冒险。
一个有关HtmlHelpapplet的会商会远远超越如今的话题,上面就只给出很冗长的版本:
<UL>
<!--...-->
<LI>IIsWebServerObjects
<UL>
<LI>1
<!--onclick:显现页面
AdsProperties.asp?AdsPath=IIS://myserver/W3SVC/1}-->
<UL>
<!--onexpand:显现下一级
AdsTreeHhc.asp?AdsPath=IIS://myserver/W3SVC/1-->
</UL>
<LI>2
<!--onclick:显现页面
AdsProperties.asp?AdsPath=IIS://myserver/W3SVC/2}-->
<UL>
<!--onexpand:显现下一级
AdsTreeHhc.asp?AdsPath=IIS://myserver/W3SVC/2-->
</UL>
<!--...-->
</UL>
<!--...-->
</UL>
怎样找到目次树的节点
程序流程应当以下:
1。绑定到一个目次工具
2。查找与之联系关系的schema类
3。假如它是一个容器工具,那末
Forall大概的容器in这个工具(经由过程schema失掉)
对一切的工具举行完成
利用HtmlHelpapplet天生<LI>...
在完成过程当中,实在一共才10行代码,可是每行代码都有起本人的难点
把握了它们你就可以够完成良多别的美好的功效。
难点一:查找Schema类工具
第一个难点就是并非一切的ADS工具都有真正有一个schema.一段程序段以下
SetoAds=GetObject(vAdsPath)
SetoAdsClass=GetObject(oAds.Schema)
关于一些高一级的工具来讲这段代码将会失利.必需再加一点非常处置。
FunctionGetClass(oADs)
OnErrorResumeNext
SetGetClass=Nothing
SetGetClass=GetObject(oADs.Schema)
EndFunction
SetoAdsClass=GetClass(oAds)
IfTypename(oAdsClass)"Nothing"Then
dosomething
EndIf
经由过程办理一个schema类,我们检察它的.Container属性来决意我们处置的容器范例。
接着当我们利用它的.Containment数组来失掉工具的类。
举例来讲,一些Domain工具将前往一个schema类数组,个中包括有
字符串"Computer","User","Group",和"Schema".
实际上的代码以下
IfoAdsClass.ContainerThen
vContainment=oAdsClass.Containment
ForvIdx=0touBound(vContainment)
oAds.Filter=Array(vContainment(vIdx))
ForEachoAdsChildinoAds
writean<LI>...entry
Next
Next
EndIf
可是又呈现成绩了,这个办法偶然候不克不及够事情。一个WinNTDomain的.Containment数组
仅仅前往原本是4个工具类中的3个.而LDAP的provider基本就不实行.Container和.Containment属性
如许我们就没法再利用下面的代码了,只好针对这些奇异的征象造出一些奇异的代码了
别的奇异的中央
上面是一些很奇异的代码,比方NT的LanmanServer工具能够设想它应当有一个FileService类
而且包括有一个FileShare类工具.准确的代码以下:
SetoAds=GetObject("WinNT://MyDomain/MyServer/LanmanServer")
可是很不幸的是当我们挪用它的父节点时将会堕落
SetoAds=GetObject("WinNT://MyDomain/MyServer")
oAds.Filter=Array("FileService")
ForEachoAdsChildinoAds
这里的代码将永久不会实行
Next
上面相似的举措也会堕落:
SetoAds=GetObject("WinNT://MyDomain/MyServer")
ForEachoAdsChildinoAds
IfoAdsChild.Name="LanmanServer"Then
ForEachoAdsGrandChildinoAdsChild
堕落
Next
EndIf
Next
这是为何呢,实在LanmanServer有一个两重身份.它是一个FileService工具
但同时它也是一个一般的Service工具。以是上面这段奇异的代码就发生了:
ForEachoAdsChildinoAds
IfoAdsChild.Name="LanmanServer"Then
SetoAdsChild=GetObject(oAdsChild.AdsPath)
ForEachoAdsGrandChildinoAdsChild
终究乐成了
Next
EndIf
Next
工具性子:
同下面比拟,工具的属性绝对简单取得。每一个工具能够设想失掉都有一个中心的属性。
好比name,经由过程这个不异的属功能够很简单的利用工具:
vAdsName=oAds.Name
年夜多半工具另有如许的属性.MandatoryProperties和.OptionalProperties,这都可以经由过程他们
的schema类失掉,它们的数值能够经由过程工具的.GetEx办法失掉:
ForEachvPropinoAdsClass.MandatoryProperties
vPropValue=oAds.GetEx(vProp)
Next
asp是基于web的一种编程技术,可以说是cgi的一种。它可以完成以往cgi程序的所有功能,如计数器、留言簿、公告板、聊天室等等。 |
|