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

📄 210005.htm

📁 探索Windows 2000发展策略以及中介层技术设计的基本概念
💻 HTM
📖 第 1 页 / 共 5 页
字号:
Server.CreateObject("QwickBank.FinCalc")%></span><span  id=Layer147></pre></font></div><p><font size=2 color=#3c3c3c face=arial>在Session物件储存一个指向COM物件的指标将赋予COM物件Session范围的生命周期</span><span  id=Layer148></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>在Session物件储存一个指向COM物件的指标将赋予COM物件Session范围的生命周期</span><span  id=Layer149></font></p><hr><p><font size=2 color=#3c3c3c face=arial>一旦物件拥有session的生命周期,它便可以让同一个session的其它ASP网页存取。举例来说,若要存取刚建立之session生命周期的物件,在同一个session中的程式码可以使用下面的叙述:</span><span  id=Layer150></font></p><div style="background-color: #D7D7D7;"><font face=Arial size=3><pre>&lt;% Set Calc =Session("FinCalc")%></span><span  id=Layer151></pre></font></div><p><font size=2 color=#3c3c3c face=arial>然後呼叫Calc物件的method。</span><span  id=Layer152></font></p><p><font size=2 color=#3c3c3c face=arial>授予COM物件Session范围的生命周期并不是一个常态现象。举例来说,假设某一个网页使用ADO发行一个资料库查询。如</span><span  id=Layer153>&nbsp;<a target='_new' href=206.htm#>第六章</span><span  id=Layer154></a>&nbsp;中所描述,查询的结果将会回传到一个Recordset物件。若这个Recordset中的资料只会被发出查询的网页存取,那麽就将这个Recordset物件的生命周期设定为预设的网页范围。不过若未来多个ASP网页都要存取这个资料,则授予Recordset物件Session范围的生命周期可能较具意义。这样就可允许所有的网页都能够存取它所包含的资料。然而与应用程式范围的生命周期比较起来,让一个COM物件执行在STA session范围将会降低执行效能。</span><span  id=Layer155></font></p><p><font size=2 color=#3c3c3c face=arial>图10-9阐示Session物件、Application物件与ASP应用程式之间的关系。就图中所示,在特定ASP应用程式中的所有网页都可以存取同一个Application物件。很神奇地,这个应用程式中任何网页参考到的Application物件都是同一个实例,ASP扩充程式能确保这件事。同样地,某个特定的浏览器在一个单独的session中所存取到的网页也都将存取到相同的Session物件,ASP扩充程式能确保这些网页参考到的物件都是那一个正确的实例。</span><span  id=Layer156></font></p><p><font size=2 color=#3c3c3c face=arial>当一个新session开始时,Session物件便会自动地建立,如在一个伴随着cookie的要求到达时,(或者在没有cookie的状况,在这个情况下IIS将会自动建立一个Session物件。)在这个session中被存取的网页可以呼叫Session.Abandon来摧毁Session物件。不过假设这件事从来就没有发生过,那麽这些物件何时消失呢?预设情况下,当20分钟内此session没有发出任何的要求时,session便视为结束,然後便会自动毁灭Session物件。不过在这个session中被存取的任何网页都可以设定Session物件的Timeout属性来更改这个设定。</span><span  id=Layer157></font></p><p><font size=2 color=#3c3c3c face=arial>在某段期间内未收到客户端的要求时,Session会自动地逾期</span><span  id=Layer158></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>在某段期间内未收到客户端的要求时,Session会自动地逾期</span><span  id=Layer159></font></p><hr><br><center><a target=_new href=imagesh/10-9.gif><img border=0 src='imagesl/10-9.gif'></a></center></span><span  id=Layer160><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图10-9</span><span  id=Layer161>&nbsp;</b></font>在ASP应用程式中的所有网页共享一个Application物件,而在一个单独的浏览器上存取的网页,则共享一个Session物件。</span><span  id=Layer162></td></table></font></center><p><font size=2 color=#3c3c3c face=arial><font size=2 face=arial color=#3e80d7><b>&nbsp;ASPError</span><span  id=Layer163>&nbsp;</b></font>不管是任何一种软体,除错一个ASP应用程式都是一项挑战。为了要让程式开发者的生活简单一点,当执行ASP网页发生错误时,IIS会自动载入预设的网页。这个预设ASP网页上的程式码可以呼叫Server物件所提供的GetLastError method,以回传一个ASPError物件。然後程式码便可以检视这个物件的属性输出错误的资讯。这些属性包含:</span><span  id=Layer164></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;ASPCode</span><span  id=Layer165>&nbsp;</b></font>包含ASP定义的值,以便辨识这个错误。</span><span  id=Layer166></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;Description</span><span  id=Layer167>&nbsp;</b></font>包含描述错误的文字字串。</span><span  id=Layer168></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;File</span><span  id=Layer169>&nbsp;</b></font>包含发生错误的ASP档案名称。</span><span  id=Layer170></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;Line</span><span  id=Layer171>&nbsp;</b></font>与</span><span  id=Layer172><font size=2 face=arial color=#3e80d7><b>&nbsp;Column</span><span  id=Layer173>&nbsp;</b></font>指明发生错误的行号与栏位的位置。</span><span  id=Layer174></li><br></font></ul></font><p><font size=2 color=#3c3c3c face=arial>ASP Error物件包含最後一次发生的错误之资讯</span><span  id=Layer175></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>ASP Error物件包含最後一次发生的错误之资讯</span><span  id=Layer176></font></p><hr><p><font size=2 color=#3c3c3c face=arial><font size=2 face=arial color=#3e80d7><b>&nbsp;ObjectContext</span><span  id=Layer177>&nbsp;</b></font>每当ASP扩充程式载入时,COM执行时期程式库也会载入。这个程式库提供一个ObjectContext物件可让每个ASP网页存取。这和我们在</span><span  id=Layer178>&nbsp;<a target='_new' href=208.htm#>第八章</span><span  id=Layer179></a>&nbsp;所讨论的ObjectContext是相同的,因此它也实作了IObjectContext介面。不过,这个介面中只有两个method显露给ASP网页存取:SetComplete与SetAbort。对於交易性的COM物件来说,这些method可用来投票表决交易执行的结果。交易与ASP网页运作的方式将描述於下。</span><span  id=Layer180></font></p><p><font size=2 color=#3c3c3c face=arial>ObjectContext物件允许ASP网页投票表决交易的结果</span><span  id=Layer181></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>ObjectContext物件允许ASP网页投票表决交易的结果</span><span  id=Layer182></font></p><hr><font color=#3e72d7 face=arial size=4><b>ASP与交易</span><span  id=Layer183></b></font><p><font size=2 color=#3c3c3c face=arial>本书之前已讨论,将许多动作组成一个交易通常是很有用的。就像其它的COM客户端一样,ASP网页可自由选择使用交易性的COM物件。举例来说,QwickBank的帐户管理ASP应用程式可能依赖</span><span  id=Layer184>&nbsp;<a target='_new' href=201.htm#>第一章</span><span  id=Layer185></a>&nbsp;描述的COM物件来执行一些函数,如存取帐户馀额,以及在不同帐户之间进行转帐等。如图10-10步骤一到叁所示,浏览器发出一个要求让应用程式中的ASP网页建立一个COM物件。此物件的异动属性 (transaction attribute)设定为必需的(Required),因此在步骤四ASP网页中的程式码呼叫物件的method,如MoveMoney,COM执行时期将会指示DTC启动一个交易,如步骤五。</span><span  id=Layer186></font></p><p><font size=2 color=#3c3c3c face=arial>ASP网页能建立交易性的COM物件</span><span  id=Layer187></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>ASP网页能建立交易性的COM物件</span><span  id=Layer188></font></p><hr><p><font size=2 color=#3c3c3c face=arial>这个物件将会执行任何你要求函数,如在帐户之间转帐,然後呼叫SetComplete或SetAbort,如图10-11的步骤六与步骤七。跟往常一样,这个动作将会通知COM执行时期结束这个交易,展示於步骤八。在步骤九到十一,这个method将结果传回到发出呼叫的ASP网页,透过IIS传送一个回应到浏览器。</span><span  id=Layer189></font></p><br><center><a target=_new href=imagesh/10-10.gif><img border=0 src='imagesl/10-10.gif'></a></center></span><span  id=Layer190><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图10-10</span><span  id=Layer191>&nbsp;</b></font>一个ASP网页可以建立交易性的COM物件,然後呼叫物件的某个method以便开始一个新交易。</span><span  id=Layer192></td></table></font></center><br><center><a target=_new href=imagesh/10-11.gif><img border=0 src='imagesl/10-11.gif'></a></center></span><span  id=Layer193><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图10-11</span><span  id=Layer194>&nbsp;</b></font>当物件呼叫SetComplete,则COM runtime便结束交易,最後交易的结果便传回浏览器。</span><span  id=Layer195></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>建立并使用交易性COM物件的ASP应用程式是很常见的。任何电子商务的Web站台,不管是虚构的QwickBank或真正的电子商务(e-business),通常都会使用某些方法来达到这个目的。再者,COM执行时期所提供的延展性特性在这个情节下也同样很有帮助。在哪种情况下对延展性的要求会比Internet应用程式来得高?</span><span  id=Layer196></font></p><p><font size=2 color=#3c3c3c face=arial>ASP网页可以直接使用交易。任何ASP网页不仅可以在交易中建立COM物件,然後做为交易树(transaction tree)的根节点。为了达到这个目的,一个 .asp档案可以下面的指令开始:</span><span  id=Layer197></font></p><div style="background-color: #D7D7D7;"><font face=Arial size=3><pre>&lt;%@ TRANSACTION=REQUIRED %></span><span  id=Layer198></pre></font></div><p><font size=2 color=#3c3c3c face=arial>完成後,这个ASP网页执行的所有动作都会包在一个交易之中。若这个网页中的script程式码建立一个COM物件,则它们便视异动属性的设定值来决定是否加入这个交易中。若以此行做为开始的ASP网页没有发生任何错误,则当这个网页执行完毕时,便会自动呼叫SetComplete。若发生错误,则自动呼叫SetAbort。你也可以在网页中使用前面描述的ObjectContext物件,以便明确地呼叫这些method。</span><span  id=Layer199></font></p><p><font size=2 color=#3c3c3c face=arial>ASP网页可以是交易树(Transaction tree)的根源</span><span  id=Layer200></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>ASP网页可以是交易树(Transaction tree)的根源</span><span  id=Layer201></font></p><hr><p><font size=2 color=#3c3c3c face=arial>运作的方式,以及和前述情节重要的不同点展示於图10-12,以及图10-13。图10-12前两个步骤跟往常一样:浏览器传送一个要求,同时IIS载入特定的ASP网页。不过因为这个网页包含前置指令要求一个交易,ASP扩充程式通知COM执行时期应该开始一个交易。COM执行时期便通知DTC开始一个新交易,如步骤叁所示。然後ASP网页便建立一个具交易性的COM物件,和往常一样,呼叫物件的method。不过,这次method call导致COM物件加入一个已存在的交易,让ASP网页当成交易的根,而不是建立一个新的交易。</span><span  id=Layer202></font></p><p><font size=2 color=#3c3c3c face=arial>当一个交易性的ASP网页开始执行时,交易便开始了</span><span  id=Layer203></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>当一个交易性的ASP网页开始执行时,交易便开始了</span><span  id=Layer204></font></p><hr><br><center><a target=_new href=imagesh/10-12.gif><img border=0 src='imagesl/10-12.gif'></a></center></span><span  id=Layer205><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图10-12</span><span  id=Layer206>&nbsp;</b></font>一个具交易性的ASP网页开始执行时,便开始新的交易</span><span  id=Layer207></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>在图10-13的步骤六与步骤七,物件和往常一样修改资料然後呼叫SetComplete。然而和前面范例的不同点在於,这并不会将交易结束。COM物件再也不是交易的根,因此和其它交易树中非根节点的物件一样,投票的结果将记录起来,而不发生任何作用。只有在ASP网页执行完成(或当它呼叫ObjectContext物件的SetComplete或SetAbort method),COM执行时期会告诉DTC结束这个交易,如图10-13步骤十所示。照例,不管COM执行时期通知DTC确认或者取消交易都视交易中所有参加者投票的结果而决定  ASP网页与COM物件。若所有参加者都投票要确认交易,则交易将会被确认。若其中一个参加者投票取消交易,则COM执行时期便通知DTC取消这个交易。</span><span  id=Layer208></font></p><p><font size=2 color=#3c3c3c face=arial>当一个交易性的ASP网页执行完毕时,交易便结束了</span><span  id=Layer209></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>当一个交易性的ASP网页执行完毕时,交易便结束了</span><span  id=Layer210></font></p><hr><p><font size=2 color=#3c3c3c face=arial>一个交易性的ASP网页同样可以包含事件处理的程式码,在交易确认或取消时触发。关联到OnTransactionCommit事件的程式码会在交易确认时期执行,而关联到OnTransactionAbort事件的程式码会在交易取消时执行。</span><span  id=Layer211></font></p><br><center><a target=_new href=imagesh/10-13.gif><img border=0 src='imagesl/10-13.gif'></a></center></span><span  id=Layer212><center><table border=0 ><td align=center><font color=#3c3c3c face=arial size=2><font size=2 face=arial color=#3e80d7><b>&nbsp;图10-13</span><span  id=Layer213>&nbsp;</b></font>当一个交易性的ASP网页执行完毕时,交易便结束。</span><span  id=Layer214></td></table></font></center><p><font size=2 color=#3c3c3c face=arial>曾经提起使用者所发出的每一个要求都是执行自己的ASP网页,网页可以建立并使用COM物件,或其它的ASP网页,然後将结果回传给使用者。然而一个单独的交易无法跨越使用者的多个要求。换句话说,当使用者要求存取的第一个ASP网页将控制权交给ASP扩充程式时,任何它所开始的交易都将结束。这个限制并不令人感到讶异,因为它允许一个交易跨越使用者的多个要求,也允许在交易处理的中途,将控制权回传的使用者。如在</span><span  id=Layer215>&nbsp;<a target='_new' href=208.htm#>第八章</span><span  id=Layer216></a>&nbsp;所述,交易执行时间应该愈短愈好,若交易逾时,则COM执行时期会取消交易的执行。在交易进行的途中将控制权交还给使用者,或交还给应用程式这两者,都能运作良好。因此,ASP不允许一个交易横跨多个要求。</span><span  id=Layer217></font></p><p><font size=2 color=#3c3c3c face=arial>交易不能跨多个使用者的要求执行</span><span  id=Layer218></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=Layer219></font></p><hr><font color=#3e72d7 face=arial size=4><b>在Script与COM物件做选择</span><span  id=Layer220></b></font><p><font size=2 color=#3c3c3c face=arial>撰写ASP应用程式很简单。事实上,简单到无法想像。透过伺服端script的简单性,程式设计师便能很容易地在ASP网页中建立大量且有意义的商业逻辑。然而,这几乎算是一个很差的主意。虽然相当容易建置,但真实的ASP应用程式并没有那麽容易维护。同样地,因为所有的ASP程式码都是直译的,在网页中执行复杂商业逻辑的ASP应用程式延展性并不是很好。较好的解决方案便是将商业逻辑设计成COM元件,然後使用ASP网页当做连接剂,将这些元件与使用者,或让各元件之间连结在一起。</span><span  id=Layer221></font></p><p><font size=2 color=#3c3c3c face=arial>商业逻辑应该永远写成COM元件,而不要在ASP网页上撰写</span><span  id=Layer222></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>商业逻辑应该永远写成COM元件,而不要在ASP网页上撰写</span><span  id=Layer223></font></p><hr><p><font size=2 color=#3c3c3c face=arial>举例来说,QwickBank帐户管理应用程式或许全部都是使用ASP网页撰写的。Script可以存取ADO,使用交易,然後几乎可以执行很多Microsoft Visual Basic能做的事。然而将这些商业逻辑包装成COM元件可能较为有意义些。前述的帐户管理工具就是这麽做的,开发一个COM物件来进行转帐、存取帐户资料的工作...等等。这个解决方案建立的应用程式执行较为快速,更容易维护,也更易重复使用。因为元件化的商业逻辑可让任何的COM客户端存取,尽可能地阻挡ASP所做的干扰永远都会是个好主意。</span><span  id=Layer224></font></p><font color=#3e72d7 face=arial size=4><b>可安装的元件</span><span  id=Layer225></b></font><p><font size=2 color=#3c3c3c face=arial>因为每个ASP应用程式都不相同,许多的ASP应用程式需要执行一些共同的函数。Windows 2000并不要求每位程式设计师重复制造这些公用的组件,而是将许多预先建立的COM元件包含进来以便在ASP网页中使用。其中最令人感兴趣的元件包括:</span><span  id=Layer226></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;Ad Rotator</span><span  id=Layer227>&nbsp;</b></font>这个元件允许将一些特定的广告随着资讯送到浏览器,然後按特定的排程将广告旋转。这个元件同样允许你记录每一个广告共有多少使用者点选。</span><span  id=Layer228></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;Browser Capabilities</span><span  id=Layer229>&nbsp;</b></font>若一个ASP网页能够得知自己欲沟通的浏览器所能支援的功能,这个网页就可以略过浏览器不支援的资讯,将符合浏览器能力的资讯传回。浏览器所传送的每一个HTTP要求中都会包含浏览器类型与版本(如Internet Explorer 5.0或Netscape Navigator 4.0)的说明。使用这个可安装的元件建立的BrowserType物件能得知浏览器支援的功能,所支援的功能描述储存在Web伺服器机器上的组态档案中。因此任何的ASP网页都可以存取,以取得发出要求的浏览器更详细的资讯。(BrowserType物件的属性也可以透过客户端的Cookie传送。)一旦这个物件建立後,应用程式便能存取它的属性以得知浏览器是否支援Java applets、ActiveX控制项、JavaScript、VBScript与cookie等等。</span><span  id=Layer230></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;File Access</span><span  id=Layer231>&nbsp;</b></font>这个元件可允许建立一个FileSystem物件,以便让ASP网页存取档案系统。</span><span  id=Layer232></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;Page Counter</span><span  id=Layer233>&nbsp;</b></font>每个网站都希望让使用者知道自己有多受欢迎。这个元件让ASP应用程式追踪它被存取的次数。此元件定期将点击率写到硬碟中,以便在伺服器重新开机时仍可以维护计数的数目。</span><span  id=Layer234></li><br></font><font size=2 face=arial color=#3c3c3c><li><font size=2 face=arial color=#3e80d7><b>&nbsp;Permission Checker</span><span  id=Layer235>&nbsp;</b></font>这个元件可让ASP网页用来验证一个使用者是否有存取位於Web伺服器上档案的权限。这个物件只显露一个单独的method,HasAccess,ASP网页可以呼叫这个method,传入欲存取的档案名称。若此method回传TRUE,则便允许使用者存取这个档案。Permission Checker可以和IIS许多验证的方式一起运作,包含匿名存取,基本验证,以及与Windows应用程式整合。</span><span  id=Layer236></li><br></font></ul></font><p><font size=2 color=#3c3c3c face=arial>Windows 2000中包含许多标准的元件可让ASP使用</span><span  id=Layer237></font></p><hr><font face=Arial Black color=#3e77d7 size=3><b></b></font><p><font size=2 color=#3c3c3c face=arial>Windows 2000中包含许多标准的元件可让ASP使用</span><span  id=Layer238></font></p><hr><p><font size=2 color=#3c3c3c face=arial>让程式设计师使用伺服端script建立Web应用程式是一个好主意。提供可安装的元件、内建的物件,以ASP所有的基础架构让其更完整。在Microsoft环境中没有比使用ASP开发的流行性还能让其更明确的事了。</span>

⌨️ 快捷键说明

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