以下是一个可能出现的例外情况:当您通过防火墙进行调用时,您可能需要调用 createobject 而不是 server.createobject。详细信息,请参阅“q193230 - prb: server.createobject fails when object is behind firewall”(英文)。
原则 7:提供丰富的疑难解答信息
确保在您所有的 asp 应用程序中都包含了错误处理过程。而且,确保您提供了有用的诊断信息。我还没有碰到有哪个人抱怨错误信息太具有说明性了。请确保在错误日志中包含以下信息:
- 用户上下文(如果您正在使用组件,您可以调用 getusername)
- 线程 id(在组件中,可以调用 getcurrentthreadid)<
- 时间
- 完整的错误信息(包括编号、来源和说明)
- 参数值
因为将在 asp 下运行,您可能希望将这些信息写到文件或 nt 的事件日志。您还可以创建记录关键的应用程序事件的应用程序事件日志,以备诊断应用程序错误时使用。
以下文章提供了有关错误处理技术的详细信息:
- “bulletproofing your asp components”(英文),charles alexander 著
- “fitch & mather stocks: web application design”(英文)
- “handling and avoiding web page errors, part 1: the basics”(英文)
- “handling and avoiding web page errors, part 2: run-time errors”(英文)
- “handling and avoiding web page errors, part 3: an ounce of prevention”(英文)
原则 8:测试性能、可伸缩性和可靠性
浏览器并不是准确的测试方式,它只能向您展示应用程序可能的用途。请针对您的应用程序设置特定的性能目标,并使用 web application stress tool 等负载工具进行压力测试。您需要自己决定您的环境所能接受的条件,以下是一些帮助您启动测试过程的通用指导方针:
- 通过测试 asp 每秒钟的请求数对性能进行测试,并建立一个最小的阈值。一般情况下,不执行数据库访问的简单 asp 页每秒钟至少应返回 30 页。调用组件或访问数据库的页每秒钟至少返回 25 页。
- 向应用程序不停地追加用户,直到每秒钟的请求数低于预先设置的阈值,用这种方式测试可伸缩性。
- 从 web 集群中移去机器,并检查错误和故障情况,以便测试可靠性。
将测试环境与实际运行的环境相匹配,甚至防火墙也不例外。这听起来代价很高,但我曾经听说过开发人员因为没有考虑到防火墙,而丢失了工作。
有关使用 web application stress tool 测试 asp 应用程序的详细信息,请参阅“i can't stress it enough -- load test your asp application”(英文)。
原则 9:增加隔离性
使用隔离功能保护您的应用程序过程能够极大地增强服务器的稳定性。谈到 internet 应用程序,是否使用隔离功能的后果可能会有巨大的差别:一个是应用程序崩溃,一个是服务器当机。保护主 iis 进程 (inetinfo.exe) 通常会排在优先级列表的较高位置。在您使用组件时,这一点尤为突出。
通常所采用的保护主 iss 进程的技术是使 web 应用程序运行在各自的内存空间中。在 internet services manager 中,您可以针对每一个 web 设置这一选项。虽然因对进程进行编组而开销的系统资源会对性能有些微的影响,但对应用程序所起的保护作用值得付出这一代价。 在 iis 4.0 下,您可以采用进程内 (in-process) 和进程外(out-of-process,oop)两种方式运行应用程序。oop 应用程序会运行在新的 mtx.exe 实例中。在 iis 5.0 下,您还能使用其他的隔离选项。可以将隔离级别设置为“低”(对 inetinfo.exe 来说是进程内应用程序)、“中”(dllhost.exe 共享实例)或“高”(dllhost.exe的非共享实例)。
除了将 web 应用程序隔离在它们自己的内存空间中之外,您可能还希望隔离不信任的组件。不信任的组件通常是在实际环境中没有通过测试时间的考验的组件。您可以在 server 包中运行这些组件,这样它们会运行在新的 dllhost.exe 实例中。
一般而言,如果要在性能和保护措施之间采取中庸之道,方式如下:在“高”隔离状态运行 web 应用程序,在库包中运行组件。这种方式最大限度地减少了编组开支,同时在进程之间提供了最强的保护作用。
详细信息,请参阅文章“server reliability through process isolation”(英文)。