⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 205004.htm

📁 探索Windows 2000发展策略以及中介层技术设计的基本概念
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<html><body><span  id=Layer1><a name=205004><font color=#3e70d7 face=arial size=5><b>分散式的COM(Distributed COM)</span><span  id=Layer2></b></font><p><font size=2 color=#3c3c3c face=arial>当COM在1993年发行时,客户端与物件都必须存在於同一台机器上。当DCOM在1996年发行後,这个限制就消失了。今天客户端可以跨apartment、行程与机器边界存取COM物件。在这个章节中,DCOM并没有更改COM的基本,它提供延伸程式允许物件与它们的客户端之间透过网路沟通。</span><span  id=Layer3></font></p><p><font size=2 color=#3c3c3c face=arial>DCOM允许客户端与执行在其它机器的物件沟通</span><span  id=Layer4></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>DCOM允许客户端与执行在其它机器的物件沟通</span><span  id=Layer5></font></p><hr><font color=#3e72d7 face=arial size=4><b>建立远端物件</span><span  id=Layer6></b></font><p><font size=2 color=#3c3c3c face=arial>若要在同样的机器上建立一个物件,客户端可以呼叫CoCreateInstance,或其它程式语言对应的函数。客户端也可以使用这个呼叫建立其它机器上的物件。图5-8显示运作的过程。</span><span  id=Layer7></font></p><br><center><a target=_new href=imagesh/5-8.gif><img border=0 src='imagesl/5-8.gif'></a></center></span><span  id=Layer8><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图5-8</span><span  id=Layer9>&nbsp;</b></font>只要将本机档案的名称取代成远端机器的DNS名称,就可以使用CoCreateInstance跨网路建立物件。</span><span  id=Layer10></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>CoCreateInstance呼叫永远都可以运作:客户端传入CLSID,以及欲取得的第一个介面指标之IID,如图5-8步骤一。COM runtime在COM+目录中搜寻CLSID,如步骤二(再次强调,本章的重点是专注於未设定元件,因此关於这个类别的所有资讯都储存在系统登录,没有储存在RegDB。这也是图5-8中只显示系统登录的原因。)</span><span  id=Layer11></font></p><p><font size=2 color=#3c3c3c face=arial>若设定正确,远端物件可以使用CoCrea-teInstance建立</span><span  id=Layer12></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>若设定正确,远端物件可以使用CoCrea-teInstance建立</span><span  id=Layer13></font></p><hr><p><font size=2 color=#3c3c3c face=arial>当COM runtime查看系统登录中的CLSID,它看到的不是一个档案名称,而是其它机器的名称。(通常是一个DNS的名称,虽然也支援其它的选项。)此时不在本机上建立物件,COM runtime与系统登录记录的机器连系(在图5-8的步骤叁),并通知建立此类别的物件。远端机器上的COM runtime在本机系统登录中查看客户端指定的CLSID,如步骤四所示,然後载入与这个名字的档案。就如同在单机的情况下,物件便建立了,如步骤五,而某个介面的介面指标便从物件取得并传回到客户端,如步骤六所示。在步骤七,客户端使用这个指标来呼叫新物件的method。从客户端的观点来看,每一件事发生的状况就像单机一样,不过过程可能会多花一些时间。</span><span  id=Layer14></font></p><p><font size=2 color=#3c3c3c face=arial>然而在某些情况下,将每一个客户端单机的系统登录设定成特定伺服器的名称并不是个合理的做法。为了避免这个问题,客户端可以呼叫CoCreateInstanceEx,取代CoCreateInstance。如图5-9展示,这两个method的其中一个不同点是,CoCreateInstanceEx允许客户端明确指定欲建立物件的机器名称。为了加速物件建立的过程,这个呼叫允许客户端指定一组可回传的介面指标,而非只回传一个。</span><span  id=Layer15></font></p><p><font size=2 color=#3c3c3c face=arial>CoCreateIns-anceEx是建立远端物件更有效率的选择</span><span  id=Layer16></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>CoCreateIns-anceEx是建立远端物件更有效率的选择</span><span  id=Layer17></font></p><hr><br><center><a target=_new href=imagesh/5-9.gif><img border=0 src='imagesl/5-9.gif'></a></center></span><span  id=Layer18><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图5-9</span><span  id=Layer19>&nbsp;</b></font>CoCreateInstanceEx 允许客户端明确指定欲建立物件的机器名称。</span><span  id=Layer20></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>现在就没有必要为特定CLSID来修改客户端的系统登录使其包含远端伺服器的名称。取代的作法,物件建立所在的机器,它的名称将会传送到CoCreateInstanceEx呼叫。对客户端来说,建立一个物件,然後获得许多介面指标是很平常的事,马上回传许多指标可以避免对远端的新物件发行多个IUnknown::QueryInterface呼叫(这是非常慢的)。</span><span  id=Layer21></font></p><font color=#3e72d7 face=arial size=4><b>存取远端物件</span><span  id=Layer22></b></font><p><font size=2 color=#3c3c3c face=arial>一旦远端物件建立後,就可以使用存取任何COM物件的方式来存取。很明显地,得要使用一些协定在客户端与伺服器机器之间传送要求与回应。</span><span  id=Layer23></font></p><p><font size=2 color=#3c3c3c face=arial>DCOM使用的协定就是所谓的Object RPC,它是Microsoft RPC协定的增强版本。(Microsoft RPC协定本身也是以Open Group的DCE使用的RPC协定为基础的。)在Microsoft Windows NT 4,Object RPC可以像TCP一样进行连结导向传输(connection-oriented),或类似UDP为非连结导向传输(connectionless transport)。每一种情况都可以使用两种不同的RPC协定,因此应用程式所看到的行为都是一致的,所有的讯息都可靠地传递。这两类传输协定都可支援,因为在某些情况下某一类会提供较佳的执行效能。然而在Windows 2000只支援连结导向的传输,DCOM应用程式不再使用UDP。这项改变是因为Windows 2000中增强对TCP的实作,当使用DCOM时它的效能比UDP还要快,因此拥有这个选择便不再具任何意义。为Windows NT 4撰写的DCOM应用程式仍可以在Windows 2000中,或混合的环境中运作,因为这些应用程式会暗中交涉要使用哪一个协定。当与Windows 2000系统交谈时,永远会选择TCP。</span><span  id=Layer24></font></p><p><font size=2 color=#3c3c3c face=arial>客户端使用Object RPC呼叫远端物件上的method</span><span  id=Layer25></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>客户端使用Object RPC呼叫远端物件上的method</span><span  id=Layer26></font></p><hr><a name="174_1"></span><span  id=Layer27><font color=#3e72d7 face=arial size=4><b>提供安全性</span><span  id=Layer28></b></font><p><font size=2 color=#3c3c3c face=arial>当一个客户端呼叫执行在相同行程中的COM物件之method时,安全性并不是个问题。(因为客户端与物件共享相同的位址空间,安全性是不必要的。)当一个客户端呼叫执行在不同行程中的COM物件之method时,安全性则由本机作业系统提供。不过当客户端呼叫执行在远端机器上不同行程中的COM物件之method时,安全性就得仅慎地考虑了。</span><span  id=Layer29></font></p><p><font size=2 color=#3c3c3c face=arial>DCOM并没有规定特别的安全性协定。在Windows 2000,DCOM应用程式可以使用Kerberos或旧有的NTLM协定来提供验证、资料完整性与资料私有性。然而对於授权,DCOM本身提供一些服务。DCOM伺服器也可以使用Windows 2000提供的标准授权机制,模拟它们的客户端,然後企图存取由ACL保护的资源。</span><span  id=Layer30></font></p><p><font size=2 color=#3c3c3c face=arial>DCOM应用程式可以使用Kerberos或NTLM</span><span  id=Layer31></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>DCOM应用程式可以使用Kerberos或NTLM</span><span  id=Layer32></font></p><hr><p><font size=2 color=#3c3c3c face=arial>DCOM所提供的安全性服务概约能够分成两类:启动安全性(activation security)与呼叫安全性(call security)。启动安全性控制哪一个客户端有在远端机器上建立物件的权限,而呼叫安全性则控制哪一个客户端有呼叫远端物件的method之权限。呼叫安全性本身又有两个选择:自动安全性(automatic security)与介面个别的安全性(per-interface security)。在自动安全性,客户端或伺服器可以马上设定它所有的安全性选项(统称为security blanket)。在介面个别的安全性,这些选项可以针对行程正在使用中的介面做不同的设定。</span><span  id=Layer33></font></p><p><font size=2 color=#3c3c3c face=arial>DCOM提供启动安全性与呼叫安全性</span><span  id=Layer34></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>DCOM提供启动安全性与呼叫安全性</span><span  id=Layer35></font></p><hr><p><font size=2 color=#3c3c3c face=arial>自动安全性很容易使用。一个DCOM客户端或EXE伺服器可以发出一个呼叫  CoInitializeSecurity,来指定所有的安全性选择。因为它马上设定了许多选项,这个呼叫拥有许多的参数。众多参数中最有趣的便是设定验证等级(authentication level),这些选择包含:</span><span  id=Layer36></font></p><font size=2 color=#3c3c3c face=arial><ul><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;无</span><span  id=Layer37>&nbsp;</b></font>(</span><span  id=Layer38><font size=2 face=arial color=#3e80d7><b>&nbsp;None</span><span  id=Layer39>&nbsp;</b></font>)不进行验证。</span><span  id=Layer40></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;连线</span><span  id=Layer41>&nbsp;</b></font>(</span><span  id=Layer42><font size=2 face=arial color=#3e80d7><b>&nbsp;Connect</span><span  id=Layer43>&nbsp;</b></font>) 只在连线第一次建立时,进行验证。</span><span  id=Layer44></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;呼叫</span><span  id=Layer45>&nbsp;</b></font>(</span><span  id=Layer46><font size=2 face=arial color=#3e80d7><b>&nbsp;Call</span><span  id=Layer47>&nbsp;</b></font>) 在每个呼叫进行验证。</span><span  id=Layer48></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;封包</span><span  id=Layer49>&nbsp;</b></font>(</span><span  id=Layer50><font size=2 face=arial color=#3e80d7><b>&nbsp;Packet</span><span  id=Layer51>&nbsp;</b></font>) 验证传送的每一个封包。</span><span  id=Layer52></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;封包完整性</span><span  id=Layer53>&nbsp;</b></font>(</span><span  id=Layer54><font size=2 face=arial color=#3e80d7><b>&nbsp;Packet Integrity</span><span  id=Layer55>&nbsp;</b></font>) 验证传送的每一个封包,并验证每个封包的资料完整性。</span><span  id=Layer56></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;封包保密性</span><span  id=Layer57>&nbsp;</b></font>(</span><span  id=Layer58><font size=2 face=arial color=#3e80d7><b>&nbsp;Packet Privacy</span><span  id=Layer59>&nbsp;</b></font>) 验证传送的每一个封包,并验证每个封包的资料完整性,并透过资料加密提供资料私有性。</span><span  id=Layer60></li><br></font></ul></font><p><font size=2 color=#3c3c3c face=arial>自动安全性允许在一个呼叫上设定行程所有的安全性选项</span><span  id=Layer61></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>自动安全性允许在一个呼叫上设定行程所有的安全性选项</span><span  id=Layer62></font></p><hr><p><font size=2 color=#3c3c3c face=arial>客户选择的验证等级可能和伺服器选择的不同。在这个情况下,便选择这两个阶层的上一层。举例来说,伺服器永远都可以要求客户端最起码使用某种等级的验证。同样地,若使用NTLM,伺服器将会验证客户端,不过客户端不能够确定伺服器是不是它要求的那一个人。在Windows 2000的环境中,Kerberos已成为DCOM应用程式预设的选项,它提供相互验证的动作,如</span><span  id=Layer63>&nbsp;<a target='_new' href=203.htm#>第叁章</span><span  id=Layer64></a>&nbsp;所描述。</span><span  id=Layer65></font></p><p><font size=2 color=#3c3c3c face=arial>CoInitializeSecurity中另一个参数设定了呼叫的模拟等级(impersonation level)。这个参数可能的选择以及它们对其它机器的伺服器行程所代表的意义如下:</span><span  id=Layer66></font></p><font size=2 color=#3c3c3c face=arial><ul><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;识别</span><span  id=Layer67>&nbsp;</b></font>(</span><span  id=Layer68><font size=2 face=arial color=#3e80d7><b>&nbsp;Identify</span><span  id=Layer69>&nbsp;</b></font>) 伺服器行程可以得知客户端的识别码,不过当存取到系统物件时,无法使用这个识别码来模拟客户端。</span><span  id=Layer70></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;模拟</span><span  id=Layer71>&nbsp;</b></font>(</span><span  id=Layer72><font size=2 face=arial color=#3e80d7><b>&nbsp;Impersonate</span><span  id=Layer73>&nbsp;</b></font>) 伺服器行程可以使用客户端的识别码来模拟客户端,不过它无法将这个识别码传送到不同机器上的伺服器行程中。这代表模拟伺服器无法发出一个要求到其它机器上的伺服器行程,要求它也模拟这个客户端。</span><span  id=Layer74></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;委派</span><span  id=Layer75>&nbsp;</b></font>(</span><span  id=Layer76><font size=2 face=arial color=#3e80d7><b>&nbsp;Delegate</span><span  id=Layer77>&nbsp;</b></font>) 伺服器行程可以使用客户端的识别码来模拟客户端,它也可以传送这个识别码。这也就是说,模拟伺服器行程可以发出一个要求到远端机器上一个伺服器行程,要求它模拟客户端,这个伺服器行程可以发出类似的要求到其它机器上的其它伺服器行程,依此类推。这个在Windows 2000中的新能力它是依赖於Kerberos的委派能力达成的。</span><span  id=Layer78></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;预设</span><span  id=Layer79>&nbsp;</b></font>(</span><span  id=Layer80><font size=2 face=arial color=#3e80d7><b>&nbsp;Default</span><span  id=Layer81>&nbsp;</b></font>) COM runtime基於为客户端设定的安全性选择来设定预设值。</span><span  id=Layer82></li><br></font></ul></font><p><font size=2 color=#3c3c3c face=arial>对於将这个识别码传送到所有伺服器行程的客户端来说,最後有可能取消它的要求,如此必须将cloaking功能打开,cloaking是Windows 2000的新特性。Cloaking允许在伺服器行程中的一条执行绪使用这条执行绪模拟的客户端识别码发出「cloaked」的要求。使用cloaking,客户端C可以呼叫伺服器S,伺服器S可以呼叫伺服器T,而伺服器T可以呼叫伺服器U,而伺服器U仍旧可以看到呼叫者的识别码是C。因为在cloaked,每个伺服器呼叫下一个伺服器,因此每个呼叫都是使用最原始的客户端之识别码。</span><span  id=Layer83></font></p><p><font size=2 color=#3c3c3c face=arial>Cloaking允许委派,伺服器可以承担客户端的识别码</span><span  id=Layer84></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Cloaking允许委派,伺服器可以承担客户端的识别码</span><span  id=Layer85></font></p><hr><p><font size=2 color=#3c3c3c face=arial>与CoInitializeSecurity对以行程为范围的选项不同,介面个别安全性允许客户端与伺服器为不同介面设定不同的security blanket。为了达到这的目的,客户端与伺服器个别使用标准的IClientSecurity与IServerSecurity介面。可设定的选项包含刚刚描述的验证等级与模拟等级。最大的不同点在於这些选项可针对每个proxy来做不同的设定。</span><span  id=Layer86></font></p><p><font size=2 color=#3c3c3c face=arial>介面个别安全性允许为不同的介面设定不同的安全性选项</span><span  id=Layer87></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>介面个别安全性允许为不同的介面设定不同的安全性选项</span><span  id=Layer88></font></p><hr><p><font size=2 color=#3c3c3c face=arial>最重要的部份,DCOM的安全性特性是建立在Windows 2000所提供的机制:Kerberos、 Microsoft的Security Support Provider Interface (SSPI),以及系统其它的安全性基础架构。增加的是存取这些服务的标准方式以及支援验证,这是安全性协定所无法解决的问题。</span><span  id=Layer89></font></p><p><font size=2 color=#3c3c3c face=arial>在本书其馀的章节中讨论到的技术都是建构在COM之上。除了Windows NT与Windows 2000作业系统之外,COM当然是最重要的技术,它是Microsoft在1990年提出的。在本章中,我将描述COM如何用来定义资料资料存取技术、存取交易处理系统、建立Web应用程式等等。所有的东西都围绕着它:在Windows 2000分散式环境中运作代表了与COM一起运作。</span><span  id=Layer90></font></p><p><font size=2 color=#3c3c3c face=arial>COM是一种相当重要的技术</span><span  id=Layer91></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>COM是一种相当重要的技术</span>
	</body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -