爱飞 发表于 2015-1-16 23:22:03

ASP网站制作之利用ADSI、ASP和一对把戏戏法主动地创建...

Access是一种桌面数据库,只适合数据量少的应用,在处理少量数据和单机访问的数据库时是很好的,效率也很高。但是它的同时访问客户端不能多于4个。access数据库有一定的极限,如果数据达到100M左右,很容易造成服务器iis假死,或者消耗掉服务器的内存导致服务器崩溃。假造目次
利用ADSI、ASP和一对把戏戏法主动地创建一个假造目次,第二部分
TomMoran和JeffSandquist
1999年2月22日

我们返来了。人人翘首以盼的这篇文章的第二部分如今在这儿。而且我想你将消费全部早晨看你的猫洗濯本人。
这个月,JeffSandquist和我完成了我们的静态目次服务接口(ActiveDirectoryServicesInterfaces,ADSI)使用程序。假如你来晚了一点,没有成绩;只需见这个系列的Part1http://www.microsoft.com/workshop/server/asp/server012599.asp。上个月,我们确认一个用户作为特权组的成员。接着我们显现了一个表单,表单上包含一个带有该特别用户组中每一个人用户名的列表框。这个表单同意我们拔取一个用户,而且为这个用户的新的假造目次选择权限。如今我们将由这个表单猎取数据并在收集服务器上创建一个新的假造目次,把它界说为一个使用,给出开启剧本权限的选项,并在文件夹上指定得当的权限。JeffSandquist将在这个过程当中引导我们。
在这篇文章的开头,我们有一个主要的、令人伤感的、足以使地球破坏的通告。Clinton,O.J.,Clemens与之比拟统统都显得惨白有力。我确信AP会注重到它,可是你将起首看到它。请持续浏览。
展览当中
上个月,我们的表格存在于一个叫Servin的假造目次。我们可使用IUSR_<MachineName>中的InternetInformationServer(IIS)平安情况实行所哀求的操纵。我们必要一个办理员身份来创立目次和指定权限。
我们完成这个目标的一种办法是把IUSR_<MachineName>账号迁徙到办理员组。而更好的办法是,在Web服务器上创立一个新的假造目次(我们将挪用ServinSecure),而且把它设置成在办理员情况中操纵,而不是在IUSR_<MachineName>情况中。我们的表单将保留在Servin目次中
而表单的处置器将保留在一个叫ServinSecure的目次中启动微软办理把持台(MicrosoftManagementConsole,MMC)然后用右键击DefaultWebSite创立一个新的假造目次。选择New/VirtualDirectory。创立一个叫"ServinSecure"(没有引号)的假造目次。你还必要供应一个之前在你的收集服务器文件体系中创立的文件夹的物理路径。一旦你创立了这个假造目次,用右键击中在MMC上新创立的假造目次,选择Properties显现假造目次的属性。
选择DirectorySecurity标签,选择Edit按钮,接着选择Enableanonymous…,编纂这个资本的身份确认办法。这时候候会呈现一个题目为AuthenticationMethods的对话框。选择Edit按钮,接着选择AccountusedforAnonymousAccess。呈现一个题为AnonymousUserAccount的终极对话框。把用户名的缺省值从IUSR_<呆板名>改成办理员,作废选定暗码同步,并为办理员帐户供应暗码。在残剩的每一个对话框上选择OK使改动失效。
上面是对话框的图形:
ASP代码
让我们一同看一下代码。我们将为我们的使用程序界说一些变量。创建一个叫CreateDirectory.asp的静态服务器页(ActiveServerPages,ASP)文件,在个中拔出以下代码:
<%@Language=VBScript%>
<%OptionExplicit%>
<HTML>
<HEAD>
<METANAME="GENERATOR"Content="MicrosoftVisualStudio6.0">
</HEAD>
<BODY>
<%
DimstrVirtualDirectoryNameIIS假造目次名
DimbolInProcessApplication处置使用标志中的IIS
DimobjIISADSIIIS工具
DimstrVirtualDirectoryPathIIS假造目次路径
DimobjFileSystemVBScript文件体系工具
DimstrOwnerNT文件夹一切者
DimobjVirtualDirectoryADSIIIS假造目次工具
DimbolScriptPermissionsIIS剧本权限标志
DimstrHTTPRefererIIS参考页
DimstrServerNameNT当地呆板名
DimobjWSHWindows剧本主机工具
DimobjRTC前往
DimstrACLCommand设置ACLs的命令行串
我们想确保用户是从我们的表单来的,而且没有棍骗我们的服务器。我们将检索HTTPReferer服务器变量和服务器名来测试它。这儿你能够做很多反省;在我们的测试中不用非常坚实。关于平安站点的优异文章,请检察由DmitryKhanine收拾的EasyApplicationStateSecurely(http://www.15seconds.com/Issue/990114.htm)。在代码的开头拔出以下代码:
strHTTPReferer=Request.ServerVariables("HTTP_REFERER")
strServerName=Request.ServerVariables("SERVER_NAME")
我们是从我们的表格来的吗?假如不是,则回绝存取
IfstrHTTPReferer"http://"&strServerName&"/Servin/Default.asp"then
Response.Write("AccessDenied")
Response.End
EndIf
如今我们的网页已证明我们的用户是从我们的表单传送了局的,我们能够猎取假造目次(VirtualDirectory)、一切者(Owner)和剧本权限(ScriptPermissions)标志的值。请注重我们是如何依据从checkboxScript猎取的值来改动的,假如它被选定,就设为True,假如没有被选定就设为False。在你的最初一名代码后拔出以下代码:
strVirtualDirectoryName=Request.Form("textVirtualDirectory")
strOwner=Request.Form("selectOwner")
IfRequest.Form("checkboxScript")="on"Then
bolScriptPermissions="True"
Else
bolScriptPermissions="False"
EndIf
我们必要确认IIS使用程序是不是存在。利用IISAdmin工具,我们反省是不是使用程序早已存在而且把响应的告诫传送给用户。
DoesthisIISapplicationalreadyexistinthemetabase?
OnErrorResumeNext
SetobjIIS=GetObject("IIS://localhost/W3SVC/1/Root/"&strVirtualDirectoryName)
IfErr.Number=0Then
Response.Write("Anapplicationwiththisnamealreadyexists.Click")
Response.Write("<AHREF=http://"&strServerName&"/servin/default.asp>")
Response.Write("here</A>tochooseadifferentname.")
Response.End
EndIf
SetobjIIS=Nothing
如今我们将利用IIS办理工具在meta数据库中创立IIS使用程序。
创立IIS使用程序
SetobjIIS=GetObject("IIS://localhost/W3SVC/1/Root")
strVirtualDirectoryPath=objIIS.Path&""&strVirtualDirectoryName
利用VBScript的FileSystemObject工具,我们将测试文件夹是不是存在于这个文件体系;假如不存在,我们将利用CreateFolder命令创立它。
SetobjFileSystem=Server.CreateObject("Scripting.FileSystemObject")
Testtoseeifthefolderexistsinthefilesystem.Ifnot,createit
OnErrorResumeNext
SetFolder=objFileSystem.GetFolder(strVirtualDirectoryPath)
IfHex(Err.number)="4C"Then
objFileSystem.CreateFolderstrVirtualDirectoryPath
EndIf
SetobjFileSystem=Nothing
利用Administration工具(在这篇文章中我们屡次利用),我们开启剧本权限(到场用户选择了这这选项)并界说假造目次作为一个历程中的使用。
在文件体系上创立文件夹
SetobjVirtualDirectory=objIIS.Create("IISWebVirtualDir",strVirtualDirectoryName)
objVirtualDirectory.AccessScript=bolScriptPermissions
objVirtualDirectory.Path=strVirtualDirectoryPath
objVirtualDirectory.SetInfo
objVirtualDirectory.AppCreatebolInProcessApplication
如今看一下这个把戏:设置权限。我们的确以为这是很复杂的部分。不幸地是,在ADSI中不存在能为假造目次设置权限的工具。手忙脚乱,而且另有一点不恬逸的感到。(大概是因为今天早晨年夜吃泰国饭菜引发的?)
搜刮15seconds.com的ADSI列表服务器,发明一篇援用DOSCACLS.EXE文件的通信(http://listserv.15seconds.com/scripts/wa15seconds.exe?A2=ind9806C&L=ADSI&P=R1861)而且经由过程DOSCMD文件利用它。我们以为我们能够为这个功效写一个VisualBasic封装并把它卷进一个定制组件(下个月的文章主题),可是必定有一个更快的办法。
我们在IanMorris收拾的WindowsScriptingHostFAQ(http://wsh.glazier.co.nz/frame.htm)持续我们的搜刮,发明了从WindowsScriptingHost?挪用DOS命令的几行代码。
我们试图利用WindowsScriptinghost从ASP文件挪用CACLS.exe,我们的网页不克不及实行。使用失利了。为何会如许?我们从DOS命令提醒单步伐试这个命令发明CACLS.EXE命令在守候我们利用Y作为Yes来确认操纵。必定有一种办法使Yes作为缺省值。
反省命令行选项没有发明任何埋没开关。就这一点,翻开扫瞄器,会见在线撑持发明CACLS.EXE好象应当当心使用。
我们镇静的抖动,发明了文章Q135268:HowtoUseCACLS.EXEinaBatchFile(http://support.microsoft.com/support/kb/articles/q135/2/68.asp)。啊哈,好的老DOS重定向。利用通道传输一个Y给CACLS.exe代表Yes。
上面是我们用来创建命令串和从ASP文件挪用WindowsScriptingHostshell的代码。
SetChangePermissionsforthedeveloperusingCACLS.exe
strACLCommand="cmd/cechoy|CACLS"
strACLCommand=strACLCommand&strVirtualDirectoryPath
strACLCommand=strACLCommand&"/g"&strOwner&":C"
SetobjWSH=Server.CreateObject("WScript.Shell")
objRTC=objWSH.Run(strACLCommand,0,True)
SetobjWSH=Nothing
这大概不是可伸缩性最好的办理计划。一个定制组件能够在年夜型的使用程序上更好的匡助你。假如你必要一个,Artisans软件有一个收费组件(http://www.softartisans.com/softartisans/safilemanager.html)同意你经由过程他的工具模子改动文件夹上的权限。(它也有一些其他很酷的特征,比方以点式输出/输入图象,操纵.ini文件和更多。)
我们终极的代码证明我们所做的统统是值得的。
Response.Write("<B>WebApplicationCreatedSucessfully</B><BR>")
Response.Write("Path:"&strVirtualDirectoryPath&"<BR>")
Response.Write("ScriptPermissions:"&bolScriptPermissions&"<BR>")
Response.Write(strOwner&"hasbeengrantedchangepermissions<BR>")
%>
</BODY>
</HTML>
那就是它。当寻觅成绩的解答时最主要的使记着利用多种资本。列表服务器,FAQs和微软常识库就包括了这一类的文章。
如今是旧事因为我们在每期ASP专栏中收到的强烈热闹的反应,我们将把我们的栏目专门用于这类手艺。能够预感的变更是,我们将先容出名的JeffSandquist。那末有甚么让人伤感的呢?TomMoran将分开ServinItUp--可是假如你未来在其他中央看到他时不要感应太惊异。
JeffSandquist(微软最好的法裔加拿年夜人之一)是开辟者撑持的ActiveServerPages扩展构成员之一,也是VisualInterDevMVP程序(http://support.microsoft.com/support/supportnet/supportpartners/mvps/brochuregeneral.asp)的次要卖力人。

帮助用户快速实现各种应用服务,ASP商有整合各方面资源的能力,可在短期内为用户提供所需的解决方案。例如,典型的ERP安装,如果要在客户端安装的话需要半年到二年的时间,但是美国的一些ASP商如USI和CORIO能在90—120天内提供ERP应用方案。

小妖女 发表于 2015-1-18 16:43:34

ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象,这就明显产生以下几个问题:

莫相离 发表于 2015-1-22 13:03:54

掌握asp的特性而且一定要知道为什么。

不帅 发表于 2015-1-25 13:18:53

如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:

分手快乐 发表于 2015-1-25 18:23:47

封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变,业务逻辑代码都不必做任何改动;继承性和多态性使得代码的可重用性大大提高。

兰色精灵 发表于 2015-1-29 10:50:09

ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。

活着的死人 发表于 2015-1-31 06:52:40

如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:

因胸联盟 发表于 2015-2-8 04:39:39

他的语法和设计思路和VB完全相同,导致很多ASP的书都留一句“相关内容请参考VB的相关教材....”更糟糕的是,相当多的ASP教程混合了Javascript,VBscript等等脚本语言,搞的初学者。

再现理想 发表于 2015-2-24 05:42:44

ASP主要是用好六个对象,其实最主要的是用好其中两个:response和request,就可以随心所欲地控制网页变换和响应用户动作了。

乐观 发表于 2015-3-15 02:05:41

运用经典的例子。并且自己可以用他来实现一些简单的系统。如果可以对他进行进一步的修改,找出你觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。

柔情似水 发表于 2015-3-21 16:18:06

它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
页: [1]
查看完整版本: ASP网站制作之利用ADSI、ASP和一对把戏戏法主动地创建...