Username: Password:

ASP研发准则
来源:作者: 发布时间:2007-11-09 05:14:02

应用程式服务器被,或最终将被 Web 服务器所使用,他通常是运行 ASP 页面的 IIS 电脑。ASP 是您的对象的唯一客户机。他带来了专门的线程和安全考虑。

虽然许多使用 ASP 的 Web 站点根本就不用组件,但在这篇文章中假定 ASP 是 Internet 客户机和组件之间的桥梁。下面的 asp/server01242000.asp">ASP 组件准则(英文)提供

ASP 和组件之间的划分服务

ASP 最常用于在服务器上创建供客户机使用的 HTML 或 XML 文档,因此我们主要讨论这种使用方案。这就引出了一个常见的问题,假如 ASP 页面在服务器上,那么他们是否属于业务层的一部分呢?在组件世界中,答案通常是否。虽然 ASP 确实在服务器上运行,而且可能和应用程式服务器在同一个空间,但是这不能使他成为业务逻辑的一部分。

随着用户界面工具的发展或随着启用更多的业务对业务方案,拥有这种明确的区分将获得巨大的回报。

话说到此,让我们来看一些最重要的业务层和表示层划分准则:

令 UI 代码和业务逻辑分离。这包括编写和 UI 耦合的代码,例如使用 ASP 内部组件的 MTS 对象,让他和业务逻辑代码分离,如同在不同的 DLL 中。


将事务和 ASP 页面分离。事务 ASP 在某些情况下很好,但是组件和多层应用程式会改变这种情况。组件不应该依赖由客户机层来管理他们的事务和业务逻辑语义。


将表示组件(使用请求和响应的组件)和 Web 服务器放在相同的机器和/或进程中。假如将使用 ASP 内部组件对象的对象放在远程机器上,那么对内部组件的任何调用将以回调形式发生。调用 IIS 客户机的是 COM+ 服务器,他显著降低了性能并使安全配置复杂化。能够将这些调整对象放在标记为“库激活”的 COM+ 应用程式中。

ASP 存在于服务器上,因此 ASP 页面必须符合资源共享规则,并且记住可伸缩性。请看下面的周详内容:

在“会话”中,管理应尽量避免用户特定的状态。


保持 ASP 无状态,并在可能的情况下允许资源池。

操作方式

在评价某个代码段是否属于业务逻辑或表示层时,请问一下自己,“假如我必须用按键式电话应用程式代替我的 ASP 页面,那么该代码是否更有用?”假如答案为“是”,那么能够尝试将他划分为业务逻辑代码或用户界面帮助器代码。

假如改变了客户机后该代码不能用,或假如他是构造用户界面的帮助器,则该代码属于表示服务层。他在 ASP 页面中,或在使用 ASP 内部组件的组件中。他不属于业务对象组件。

理解桌面和 ASP 客户机的区分

ASP 是组件的特别客户机,不同于桌面上的传统单线程 Win32 应用程式。主要区分概括如下。

线程管理:ASP 是多线程客户机。这意味着能够有许多并发活动一起运行,也许在同一时刻处理不同的 ASP 页面。这说明不能使对象伪称他是唯一的使用者来独占系统。这样做可能有意外的反应,例如,养成一个坏习惯:将对象存储在 ASP 会话或应用程式变量中。


安全环境:ASP 是由 Web 站点中的 Internet Information Services 5.0 执行的,有低、中、高三种隔离度。甚至这些 Web 站点能够有不同的安全配置、允许或拒绝匿名访问、验证客户等等。任何这些配置产生了大量的方案,即不同的用户帐户最终用的是您的对象。


轻松增长:这不是技术问题,而是 Web 应用程式所提供设施的副效应。传统上,为桌面应用程式增加用户基,需要仔细计划好向已知数量客户机的转出。ASP 已改变了该过程。在启动和运行后,ASP-Visual Basic 应用程式能够方便地打开,供当地的或世界范围的任何职员、任何业务伙伴和任何客户使用。能够用这种方式描述 ? 拥有超链接的单个电子邮件能够使用户基成十倍地增长。您的应用程式为此作好准备了吗?唯一了解的方式是对 Web 站点进行强度测试,以获得实际性能的预期值。关于强度测试的周详信息,请参阅“应用程式生命周期”一节。

在 ASP 内应该怎样使用 Visual Basic 对象?在页面范围内创建和取消您的对象。也就是说,尽可能使 ASP 页面无状态,只在暂时状态下依赖会话或应用程式变量。不要将对象存储在会话或应用程式变量中。这将 ASP 线程锁定到您的会话、取消任何可伸缩性的预期值。也就是说,Web 服务器处理的用户数不会超过几十个。假如需要在会话或应用程式中存储内容,请使之成为数据而不是对象。

更有能够遵守的许多其他准则。我们建议您阅读 MSDN Voices 上 J. D. Meier 撰写的专栏“Servin’ it Up”。该专栏包括了大量的技术、实践和技巧,有助于研发可扩展的、可靠的 ASP 和组件应用程式。

参考

asp#server">MSDN Voices: Servin’ it Up Column(英文)

SeminarOnline:在 ASP 下使用自定义 COM 组件(英文)

asp">MSDN 杂志(英文)不要将引用存储在会话或应用程式中的 VB 对象中

任何 Visual Basic 6.0 组件都是“单元线程”的,就是说他们都运行在 STA 单元中。这意味着假如在线程中创建对象,那么对该对象的任何调用都必须用同一线程服务。许多线程(来自并发 Web 站点用户)使用 STA 对象的同一实例,会引起一连串的活动,有可能成为应用程式中的瓶颈。

此外,在会话范围内存储用 Server.CreateObject 创建的 STA 对象,能够有效地将执行线程联系到当前用户,从而将应用程式的最大并发用户数限制到默认的 20xN(N = 处理器数量)。

操作方式

假如您按照我们的建议使对象无状态,则无需存储引用以供客户机复用,并在应用程式范围内存储他们。客户机将能够单独创建、使用和取消他们自己的对象。这就减少了保持会话特有对象的需要,原因是他们不保留会话特有的状态。

推荐的方式是使对象无状态,他在需要时访问数据库或其他存储区(例如 cookies 和 LDAP)。

假如需要使用会话或应用程式范围的数据,请将数据,而不是处理数据的对象,存储在此。您能够创建一个类,来封装对所需值的处理。

参考

asp">信息:不要在会话或应用程式中存储 STA 对象 (Q243543)(英文)

PRB:将 STA COM 组件存储在会话中,会将会话锁定在单线程中 (Q243815)(英文)

信息:ASP 下的组件线程模型概要 (Q243544)(英文)

学习 IIS 5.0 中的新内容

Internet Information Server 5.0 增加了许多新功能。这些改进均已写入 J.D. Meier 的 MSDN 文章中:asp/server02282000.asp">沿用 IIS 5.0 中的 ASP(英文)。下面是该文中最重要改进的概述。

改进的、出色的性能


Server.Transfer 和 Server.Execute 方法


集中式错误处理


改进的浏览器功能


改进的脚本引擎


正则表达式分析器


和 ADO 记录集 XML 功能的集成


新的安全性、缓冲、隔离和管理功能

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅