荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Jobs (温少), 信区: Visual
标  题: IIS 5.0的新特性
发信站: BBS 荔园晨风站 (Sun Feb 13 09:48:36 2000), 转信



             IIS 5.0的新特性

MSDN开发者新闻   新闻目录
 最新更新:五月五日


本文假定你熟悉动态服务器页(Active Server Pages)和VBScript以及因特网信息
服务(Internet Information Services)5.0
Jeff J. Rodenburg


因特网信息服务5.0,Windows 2000的一部分,微软承诺这是至今最好的IIS(因
特网信息服务)。

微软因特网信息服务(IIS)5.0,下一代的微软网络服务器,计划是Windows
2000网络服务中的一部分。除了IIS,Windows 2000网络服务预期包含Windows NT
4.0选择包中发布的附加服务,例如,证书服务器(Certificate Server)和索引
服务器(Index Server)。IIS的安装简单易懂,使用带有微软管理控制台(
Microsoft Management Console ,MMC)的因特网服务管理器(Internet
Service Manager)给予IIS 5.0和IIS 4.0同样的外观。

让我们注视5.0版中实现的特殊的改进。我将评论和分析在ASP嵌入对象中发布的
最新方法。将注视动态数据对象(Active Data Objects ,ADO)中的改进,产业
标准协议的合并和IIS 5.0中最新的安全性方面的改进。


IIS 5.0的发展基于Windows NT 5.0服务器测试版2中装载的网络服务,但是
Windows 2000的最终发布日期至今没有决定。(Windows 2000 测试版3预期于
1999年春天发布。)组件的最终实现与我将在这儿讨论的可能不同。

微软强调IIS 5.0中的改进是在少数关键领域,特别是安全性和易用性方面。为满
足创作者和应用程序开发者,这个版本在存储方面包含了新的发布方法。ASP模型
的更新和其他有助于改进处理能力和提高效率的修改。

IIS 5.0带来新版本的网络服务(inetinfo.exe),ASP解析器(ASP.DLL)和二进制
脚本引擎(vbscript.dll和jscript.dll)。另外,Windows 2000预期包含ADO 2.1
版。你可以利用其中包含的每个新特征写应用程序,而这些应用程序又利用了
Windows 2000中计划包括的网络服务。

改进基于ASP的应用程序支持

一些建立到网络服务引擎中的功效应该使ASP应用程序便于开发者管理。一个好的
特征是无脚本的ASP处理,在没有服务器端脚本时该处理消除了一个对ASP解析的
调用。为了更加彻底的解释这个问题,我们首先讨论IIS怎样处理一个ASP请求。


当IIS接收到一个HTTP请求时,它的工作是返回被请求的资源,例如一个静态或动
态页(见图1)。注册入口映射文件,ISAPI扩展的扩展名(Internet服务器应用
编程接口)。当IIS接收到一个请求时,如果资源是可用的,IIS将检查被请求的
资源。取决于资源的扩展名,它将装入适当的ISAPI扩展,将请求转寄给它,接受
一个返回调用,将数据流返回到发出请求的用户浏览器。例如,当接收到一个对
ASP页的请求时,IIS将请求转寄给ASP.DLL、ASP解析。ASP.EXE),IIS简单的返
回数据到用户。


图1:IIS 接收一个请求

在早期的版本中,IIS会引导全部请求到指定的扩展上。例如,如果一个ASP也被
请求,IIS产生一个到ASP.DLL的调用去处理该页。然而,一个ASP也可以完全由客
户端HTML标识符和函数正确的组成。如果一个没有服务器端脚本的ASP页被请求,
仍产生一个调用到ASP.DLL。这是一个低效率的处理。为了避免到ASP解析的调用
,开发者不得不为所有不是服务器端脚本的页命名一个.HTM的扩展名。因为在5.0
版之前的版本中,IIS对HTML文件不提供ISAPI扩展的调用服务。当技术上进步时
,对于复杂的含有ASP和HTML多重链接的站点就产生问题:网络服务器招致一个对
ASP.DLL不必要的调用。同时,若给定站点内容不断的改变,维护工作将是非常巨
大和令人头疼的。

IIS 5.0现在包括一些初始检查特征,将检查一个ASP页来确定其含有服务器端脚
本,优先转寄它给ASP解析处理。ASP检索的效率与一个简单HTML文件请求的效率
不相等,但是它在处理程序方面与较早的IIS版本确实有显著的改进。这个特征的
最大好处是你可以用.ASP后缀名编码整个站点,而不论服务器端脚本是否存在。
这使你更新你的站点和在需要的页上实现服务器端脚本更容易,而没有费心劳神
的维护工作。

ASP解析在另外几个领域也有了改进,主要是通过新的metabase特性的扩展。在
IIS 4.0版介绍过,metabase是一个控制IIS的行为的分层数据库。Metabase通过
三个不同接口为IIS/ASP设置环境注册表设置。因特网服务管理器是一个与IIS
4.0的功能相似的微软管理控制台;可以手工设定它的特性。IIS的管理对象用户
接口遵循微软动态目录服务接口(Active Directory Services Interface,ADSI
)结构。第三个接口是IIS管理基础对象,它由一标准串行通信口接口实现。除了
手工设置这些特性,IIS管理对象还可以通过应用软件和非因特网服务管理器程序
式的机制等来管理IIS。

哪个方法是最好的?这取决于你的条件和你对站点的需求。如果你的网络站点不
需要太多处理环境的修改,因特网服务管理器对你的站点和网络应用软件所有特
性的设置很可能就是足够好的。然而,如果你的站点的这些设置需要相当可观的
维护工作,程序式的管理可能会更适合。

在我解释程序式的方法前,我首先解释一下微软动态目录。动态目录是网络资源
的集合, 象对象一样被访问。动态目录模型的目的是提供一个集中式目录,在一
个管理点包含所有这些对象,不考虑物理上机器的位置。现在,计算环境正不断
成长跨越多个应用程序和平台的多重系统。设计动态目录可以更有效的管理这些
对象。

动态目录服务提供存取动态目录成员对象的服务。ADSI提供通过程序存取这些对
象的服务。像前面所描述的,IIS 5.0通过两个接口,ADSI和COM,提供通过程序
的管理。

ADSI方法对于基于脚本的自动化任务的管理是理想的。这个问题的完美解决方案
是一个ASP页,该页允许用户在网络服务器上为他们自己创建网络目录。所有可通
过因特网服务管理器配置的特性均能通过ADSI应用,这是通过微软的因特网服务
管理器的HTML版本实现的。对于示例代码,你只需在你喜欢的编辑器上查看ASP页
的源代码。ADSI基准可用VBScript或Jscript在ASP、Visual Basic或C++中产生。
Java语言将支持ADSI,但是当前唯一支持Java执行ADSI的是在J/Direct,这是在
Java 2.0的微软SDK(软件开发工具包)中发布的。

ADSI中的COM接口对Visual Basic、C++或任何支持接口的工具都适合。COM实现对
于服务器端ISAPI扩展或简单的服务器端对象是很实用的。如果你的站点支持高级
用户或高资源负荷、或者站点的性能是个关键,那么用COM将是很有利的。


ASP 改进

在IIS 5.0版中最好的改进是ASP中展现的最新特征。这些特征包括现存对象中的
新方法、一个新组件、ADO和脚本引擎的升级。

自从IIS 3.0和ASP的合并,Application(应用程序)和Session(会话)对象是
嵌入式的并且已经是可用的。两个对象都支持Contents(内容)集合,该集合由
存在于适合对象的存储器中的所有变量组成。你可以检查这个集合,检查它的内
容,改变它的选项的值。

IIS 5.0中介绍了两种Contents集合的新方法,Remove(清除)和RemoveAll(全
部清除)。Remove方法可以从Contents集合中删除一项,RemoveAll从存储器中清
除整个集合。这些方法为开发者提供便利,使他们能写出更高效的代码以在脚本
执行时管理服务器资源。对Application和Session对象来说,甚至可以在请求未
发生时使用服务器资源,当变量不再被需要时,存储器可以释放它们。语法简单
。在基于1的集合中使用Remove方法,你仅仅涉及变量名或它的数字的位置。
RemoveAll方法将删除集合中的所有项。

服务器对象可以用三种新方法处理。Execute(运行)方法从字面意义上讲是一个
程序调用,运行时不用考虑你传递给它什么资源。Transfer(传递)方法是一个功
能方向控制器,从一页运行到下一页。可以返回一个ASPError对象的
GetLastError方法也被引入IIS 5.0。Server.Execute可以用来强制运行页内的
ASP文件。例如,如图2所示我将开启两个ASP页。如果你请求Date.asp,你的浏览
器中将接收到如图3所示页面。



图3:Date.asp

Execute方法调用已引用的资源,在这个例子中是Time.asp。Time.asp被正确的执
行,就像它是被浏览器请求直接调用一样,但实际上却是服务器而非浏览器做出
这个请求。下面用一些代码来说明这一点。


<% Language=VBScript %>
<html>
<body>
The time is <%=Time()%>.
<table>
<tr><td><b>Server Variable</b></td>
<td><b>Value</b></td></tr>
<tr><td><b>Request.ServerVariables("URL")</b></td>
<td><b><%=Request.ServerVariables("URL")%></b></td></tr>
</table>
</body>
</html>

这几行附加到Time.asp的代码用于计算URL头的值,它是由浏览器传递的被请求资
源。

图4:Time.asp

请求Time.asp页,接收到响应如图4所示。URL值是被请求的资源,这儿是
time.asp。当你请求date.asp时,它传达Server.Execute命令来执行time.asp,
你将得到一个不同的响应(见图5)。


图5:Date.asp,不同的响应

请注意被请求的URL是对date.asp的原始请求。Server.Execute命令直接请求要求
的资源,而非由浏览器发布的命令。URL值说明原始的请求没有改变,运行
time.asp不需要浏览器和服务器间来回交互。直到页被处理完毕服务器才脱离控
制,这样,资源处理的效率是很高的。


Sever.Transfer是一个控制重定向函数,它把处理传递到被请求路径。这与响应
重定向函数不同,在控制重定向中控制从不离开服务器。Response.Redirect实际
上发送了一个响应到浏览器,它产生一个附加请求到服务器申请另外的资源。服
务器接着返回新的被请求资源。Sever.Transfer执行本质上同样的功能,但是由
于在浏览器和服务器间没有第二个响应,这使得在页与页之间的控制传递更加高
效。


Sever.Transfer方法解决了许多Response.Redirect方法的问题,而不仅仅是效率
的问题。当Server.Transfer方法被调用时,所有会话级或应用级的变量或对象被
分配到调用页,使方法引用在下个资源是可行的。



图7:That Page Hyperlink


例如,让我们由图6所示的页开始。打开/Windows2000/ThisPage.asp 返回的页可
以链接到其他页,/Windows2000/ThatPage.asp。本页载入的超链接是
/OtherWebApp/NextPage.asp,它使用一个嵌入/Windows2000/ThisPage.asp的会
话变量。单击超链接(见图7)返回ThatPage.asp(见图8)。



图8:ThatPage.asp

虽然这里没有显示,ThisPage.asp的内容可以先于对Server.Transfer的调用被返
回到浏览器。Response.Redirect方法要求全部内容在调用方法之前被缓存,但是
Server.Transfer解决了这个问题,使处理这个方法少了些繁重工作。
Server.Transfer方法一个重要方面是当在其他网络应用程序中请求一页时支持相
同的会话ID。当Server.Transfer方法被调用时,请求页仍运行在包含被请求的原
始资源的网络应用中。然而,其他应用的Global.asa文件将不被激活,所以该文
件中的变量或对象将不被建立。

GetLastError方法对服务器对象来说可能是最好的改进。在处理产生错误的事件
中Server.GetLastError产生一个ASPError对象。ASPError对象是ASP中实现的错
误处理的第一个版本,带有许多可以提供关于讨厌的错误的信息的特性。
GetLastError方法的目的是返回可用对象的引用。ASP服务器端脚本处理有三个基
本问题,ASPError对象将俘获所产生的错误:预处理错误如头文件;编译错误如
不正确的代码;不正确的数据处理可产生的运行错误。


在处理ASP请求中,当IIS遇到这些错误之一时,Server.Transfer方法被调用,
500-100.ASP错误页被请求。你可以将这页定制到你的中心内容,ASPError对象可
以用来定制错误页以提供所发生错误的信息。

下列摘自文件Badcode.asp的ASP代码:

<% Language=VBScript %>
<html>
<body>
<%
' We dim an array, then assign a value to the
' array that is out of scope.
Dim nArray(3)
nArray(0) = 0
nArray(1) = 1
nArray(5) = 5
%>
</body>
</html>


因涉及一个超出它的尺度范围之外的nArray元素,此页产生一个编译错误。当此
页被请求时,将产生一个错误,网络服务器调用Server.Transfer方法传送控制到
定义的错误页。当然你可以使用缺省页,我选择在这儿构造我自己的错误页(见
图10)。



图10:错误页

你需要通过Server.GetLastError来存取 ASPError对象。这儿我已实现我的版本
,你可以看到通过存取定制错误页的微软实现,错误页缺省的装在你的服务器
<windir>\help\iishelp\common\目履。它的设计具有充分的普
遍性,可以满足任何的OLE DB提供者,不论它是一数据库、邮件服务器、文本文
件或是其它任何平台。

微软OLE DB Persistence Provider(持续供应者)处理Recordset对象的Save(
存储)和Open(打开)方法的一个新特征是允许存储一个记录集到一个文件。这
个Save方法添加一个可选择的adPersistXML参量,以XML格式存储文件。网络应用
程序能从XML文件中重新打开记录集,可以使这个文件被其他应用程序共享。


ADO Recordset对象的一个典型应用是为服务器端处理重新获得数据。当SQL查询
可以应用合适的过滤器建立一个记录集时,你征,对于为IIS 5.0开发ASP应用程序时非常有
帮助。脚本引擎可以由Microsoft Scripting Web站点下载(
http://msdn.microsoft.com/scripting)。你可以参考网站上的工作示例,这里
我将讨论脚本语言的最新特征。VBScript被改进了,包括添加一个新的对象和
Class支持。VBScript滞ü梅衿髅冻袒魃系亩韵罂梢员皇迪?
和使用脚本应用程序的存储空间。

新RegExp对象现在给VBScript添加常规的公式。常规公式用于串的求值和操作。
RegExp对象本质上以一种更有效的方式执行一系列的InStr的求值。RegExp对象的
能力是它计算针对某个特殊串的模式的表达式的能力。

VBScript添加的另一个协定是支持With语句。With语句的执行是从Visual Basic
中借来的,当演示一个对象和调用一系列特性或方法时非常有用。代码整洁,对
象参考早已在那儿,所以特性或方法调用会更高效。

Jscript通过添加错误异常处理确实获得更多的注意。如果?


图11:存取网络服务器的目录

Microsoft FrontPage Server Extensions(服务器扩展)是DAV的等价产物。微
软计划在IIS 5.0中继续支持FrontPage Server Extensions,并且添加为网络出
版特色集成的Office Server Extensions到Office 2000应用程序组中。


安全性实现

网络安全中最新企业标准的发展是摘要确认(Digest Authentication)规范。摘
要确认被提议为要素确认(Basic Authentication)实现的替代者。要素确认是
当前企业标准中鉴别用户提交浏览器请求信任状的方法。但是要素确认有一个明
显的缺点,用户ID和密码像明码电文一样传送。W3C想IIS 5.0中的实现包含一些特性。摘要
确认只能在虚拟目录或服务器上
被激活,该服务器有权使用用户密码的无格式文本拷贝。一旦域控制器获得这信
息,网络服务器和域之间必定存在合作。


其他

在IIS 5.0中也可以使用HTTP压缩技术。你可以对静态文件、动态应用文件、或两
者启动压缩。浏览器对压缩文件的请求将检索文件的压缩版本以减少下载时间,
然后在本地解压缩文件。这要求浏览器能支持HTTP压缩技术,像Internet
Explorer 5.0。HTTP压缩技术只是IIS 5.0设置的一个特性,HTTP压缩技术的编码
中没有优点或策略。然而,HTTP压缩技术在适当的环境中会仕吣闶裁词强梢杂美粗圃煺嬲
澜缂兜耐缬τ?
程序和内容服务器。

摘自即将出版的1999年4月份的Microsoft Internet Developer。可由你本地的杂
志摊获得,或者更好的是订阅它。

http://msdn.microsoft.com/library/sdkdoc/iisref/sdkt69f8.htm

http://www.microsoft.com/ntserver/windowsnt5/techdetails/default.asp

--


   我想超越这平凡的生活,注定我暂时漂泊!

   我无法停止我内心的狂热,对未来的执着!

※ 来源:·BBS 荔园晨风站 bbs.szu.edu.cn·[FROM: 192.168.18.111]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店