65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 VB.NET 入门 ASP.NET

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.39/5 (28投票s)

2001 年 9 月 4 日

73分钟阅读

viewsIcon

389485

本章将为您提供使用 VB.NET 入门 ASP.NET 的分步介绍。

Sample Image
标题 使用 VB.NET 入门 ASP.NET
作者 Rob Birdwell, Ollie Cornes, Chris Goode, John Kauffman, Ajoy Kristnamoorthy, Juan T Llibre, Christopher L Miller, Neil Raybould, David Sussman, Chris Ullman
出版社 Wrox
出版日期 2001 年 8 月
ISBN 1861005040
价格 39.99 美元
页数 1000

开始使用 ASP.NET

ASP.NET 是一项用于编写动态网页的新兴且强大的技术。它是微软两大技术,即 Active Server Pages (ASP) 和 .NET 的融合。ASP 在 Web 计算领域已是老牌技术,在过去的五年多时间里,它提供了一种坚固、快速且有效的方式来创建动态网页。.NET 是新兴技术,它是一整套由微软设计的技术,旨在彻底改变未来所有编程开发的进行方式以及公司开展业务的方式。因此,作为两者的结合,ASP.NET 是一种利用 .NET 中的创新来创建动态网页的方式。

首先要说明的一点是,您无需了解任何 ASP 知识即可开始使用 ASP.NET。您只需要一点 HTML 知识来构建自己的网页,就可以开始操作了!ASP.NET 比其前代技术更强大,它不仅能生成动态网页,还能根据您使用的浏览器进行定制。更好的是,它带有一系列预定义的控件,可供您在自己的项目中使用,从而节省您的时间并提高您的工作效率。

那么,您可以使用 ASP.NET 做什么呢?列出您不能做的反而会更快!最引人注目的一项新创新是创建应用程序的方式,您可以用 VB.NET、Jscript、C#(微软推出的类似 Java 的新语言)或它们的组合来编写代码——您将选择最适合这项工作的语言,或最能发挥您技能的语言。

在您的应用程序中,ASP.NET 允许您为特定用户定制页面,跟踪用户在网站中的活动详情,并将他们的信息存储在数据库或自描述的 XML 文件中。您可以更改页面布局,添加和删除您机器上的文件(如果您有适当的权限),甚至可以利用其他应用程序的逻辑,而无需先下载它们。

 

在本章中,我们将主要关注 ASP.NET 的安装过程。我们将从快速介绍 Web 服务器、动态网页的世界,以及 ASP.NET 是什么开始,但我们真正要实现的目标是让您运行一个功能齐全的 Web 服务器,并安装好功能齐全的 ASP.NET。在本章结束时,您将创建一个简短的 ASP.NET 测试页面,以检查 Web 服务器和 ASP.NET 是否按预期工作。别担心,我们会看看一些最常见的潜在问题,以防万一事情不像计划那样顺利!

将要讨论的主题包括:

  • 静态网页
  • 动态网页
  • 创建动态网页的各种技术的概述,包括 ASP.NET
  • 安装 Internet Information Services (IIS)
  • 安装 .NET Framework
  • 测试和故障排除您的安装

什么是静态网页?

如果您今天在互联网上冲浪,您会看到那里有很多静态网页。我们说的静态网页是什么意思?本质上,它是一个内容由一些 HTML 代码组成的页面,这些代码直接输入到文本编辑器中并保存为 .htm 或 .html 文件。因此,页面的作者在任何用户访问页面之前,就已经在 HTML 中完全确定了页面的“确切”内容。

静态网页通常很容易识别;有时您只需查看页面内容就能分辨出来。静态网页的内容(文本、图像、超链接等)和外观是“始终”相同的——无论“谁”访问页面,“何时”访问,“如何”到达页面,或其他任何因素。

例如,假设我们为网站创建一个名为 Welcome.htm 的页面,通过编写如下简单的 HTML:

<hmtl>
<head><title>A Welcome Message</title></head>
<body>
  <h1>Welcome</h1>
  Welcome to our humble web site. Please feel free to view our
  <a HREF="contents.htm">list of contents</a>.
  <br><br>
  If you have any difficulties, you can
  <a href="mailto:webmaster@wrox.com">send e mail to the webmaster</a>.
</body>
</html>

每当有客户端访问我们的站点查看此页面时,它看起来都会是这样。页面的内容是在请求发出“之前”确定的——在 Web 管理员将 .htm 文件保存到磁盘时。

静态网页如何提供服务?

好的,让我们暂时考虑一下静态纯 HTML 页面是如何到达客户端浏览器的。

  1. Web 作者编写一个由纯 HTML 组成的页面,并将其保存在服务器上的 .htm 文件中。

  2. 稍后,用户在浏览器中输入页面请求,该请求从浏览器传递到 Web 服务器。

  3. Web 服务器定位 .htm 页面,并将其转换为 HTML 流。
  4. Web 服务器将 HTML 流通过网络发送回浏览器。
  5. 浏览器处理 HTML 并显示页面。

静态纯 HTML 文件(如 Welcome.htm)可以很好地提供服务。我们甚至可以通过添加更多 HTML 来创建框架和表格,从而优化此类页面的呈现和可用性。但是,通过编写纯 HTML 只能实现有限的功能,这正是因为它们的内容在页面被请求“之前”就已经完全确定了。

静态网页的局限性

例如,假设我们想增强我们的 Welcome 页面——使其显示当前时间或为每个用户个性化的特殊消息。这些是简单的目标,但仅使用 HTML 无法实现。如果您不相信,请尝试编写一段 HTML 来创建一个显示当前时间的网页,如下所示:

当您键入 HTML 时,您很快就会意识到问题所在——您知道用户会在某个时候请求页面,但您不知道他们请求时“时间会是什么”!将时间硬编码到 HTML 中将导致页面总是声称时间相同(并且几乎总会显示错误的时间)。

换句话说,试图为显示时间的网页编写纯 HTML——但您无法确定网页“应”显示的“确切”时间,直到页面被请求时。仅靠 HTML 无法完成。

此外,HTML 没有任何个性化您的网页的功能,提供的每个网页对每个用户都是相同的。HTML 也没有安全性,代码对所有人可见,而且没有什么能阻止您复制别人的 HTML 代码并将其用于您自己的网页。静态页面可能非常快,就像通过网络复制一个小文件一样快,但如果没有动态功能,它们是相当有限的。

由于我们无法在页面被请求“之前”通过保存硬编码的 HTML 到文件中来创建页面,因此我们需要一种方法来在页面被请求“之后”生成 HTML。有两种方法可以做到这一点;我们现在将同时查看它们。在我们继续之前,我们需要确保大家都能理解我们在这里介绍的术语。

什么是 Web 服务器?

Web 服务器是一种管理网页并通过本地网络或 Internet 向“客户端”浏览器提供网页的软件。就 Internet 而言,Web 服务器和浏览器通常位于两台不同的机器上,可能相距很远。然而,在更本地化的情况下,我们可以设置一台运行 Web 服务器软件的机器,然后使用“同一”机器上的浏览器来查看其网页。无论我们访问远程 Web 服务器(即与我们的浏览器应用程序不在同一台机器上的 Web 服务器)还是本地 Web 服务器(Web 服务器和浏览器在同一台机器上),Web 服务器的功能——向所有人提供网页——都保持不变。如果只有您一个人可以访问您自己机器上的 Web 服务器,例如当您在家用机器上运行 Web 服务器时,情况也是如此。尽管如此,原则仍然是一样的。

虽然有许多 Web 服务器可用(最常见的包括 Apache、IIS 和 Iplanet 的 Enterprise server),但本手册中我们只讨论一种:微软的 IIS 5。这是因为它是唯一能够运行 ASP.NET 的 Web 服务器。Web 服务器是 Windows 2000 和 Windows XP 安装的一部分。IIS 5.0 随 Windows 2000 提供,IIS 5.1 随 Windows XP 提供;然而,两者之间几乎没有区别,在本章中我们将它们视为同一产品。我们稍后将讨论如何安装 IIS;但首先让我们看看它在创建动态网页方面的作用。

动态网页如何提供服务?

要充分理解动态网页的本质,我们首先需要看看在使用静态网页时我们能做什么和不能做什么的局限性。

提供动态网页内容的两种方式

尽管本手册中我们只使用其中一种方法来创建动态网页,但您需要了解这两种不同的方法,因为这两种方法的底层原理在本书中都会大量出现。

客户端动态网页

在客户端模型中,附加到浏览器的模块(或插件)会完成创建动态页面的所有工作。HTML 代码通常会随一个包含指令集的文件一起发送到浏览器,该文件从 HTML 页面中引用。然而,也经常会发现这些指令混杂在 HTML 代码中。然后,当用户请求页面时,浏览器会使用这些指令来生成纯 HTML 页面——换句话说,页面是按需动态生成的。这会生成一个 HTML 页面,然后发送回浏览器。

因此,在这个模型中,我们的五个步骤现在变成六个:

  1. Web 作者编写一组创建 HTML 的指令,并将其保存在 .htm 文件中。作者还编写一组不同语言的指令。这可能包含在 .htm 文件中,或者包含在单独的文件中。

  2. 稍后,用户在浏览器中输入页面请求,该请求从浏览器传递到 Web 服务器。

  3. Web 服务器定位 .htm 页面,并且可能还需要定位包含指令的第二个文件。

  4. Web 服务器将新创建的 HTML 流和指令通过网络发送回浏览器。

  5. 浏览器中的一个模块处理指令,并将其作为 HTML 返回到 .htm 页面中——即使请求了两个页面,也只返回一个页面。
  6. 然后,浏览器处理 HTML 并显示页面。

近年来,客户端技术已逐渐失宠,因为它们下载速度很慢,特别是如果我们不得不下载一个包含单独指令集的文件。在某些情况下,我们可能需要下载多个单独的指令文件。第二个缺点是每个浏览器对这些指令的解释方式不同,因此我们无法保证 Internet Explorer 理解的指令,Netscape Navigator 或 Opera 是否也能理解。另一个主要缺点是,编写使用服务器端资源(如数据库)的客户端代码很困难,因为它是在客户端解释的。另外,所有客户端脚本的代码对每个人都是可用的,这可能不受欢迎。

服务器端动态网页

使用服务器端模型,HTML 源会连同混杂的指令集一起发送到 Web 服务器。同样,这组指令将用于在用户请求页面时生成页面的 HTML。再次强调,页面是按需动态生成的。我们的五个步骤再次变成六个,然而,在指令处理的地点方面有一个微妙的变化:

  1. Web 作者编写一组创建 HTML 的指令,并将其保存在一个文件中。

  2. 稍后,用户在浏览器中输入页面请求,该请求从浏览器传递到 Web 服务器。

  3. Web 服务器定位指令文件。

  4. Web 服务器遵循指令来创建 HTML 流。

  5. Web 服务器将新创建的 HTML 流通过网络发送回浏览器。

  6. 浏览器处理 HTML 并显示页面。

这里的关键在于,所有处理都在服务器上完成,然后才将页面发送回浏览器。与客户端模型相比,其主要优点之一是只有描述完成页面的 HTML 代码才会被发送到浏览器。这意味着我们页面的逻辑隐藏在服务器上,我们可以放心地假设大多数浏览器至少能够尝试显示它。正如您可能已经猜到的,ASP.NET 遵循服务器端模型。

实际上,提供动态网页的任何一种过程与提供静态网页的过程只有很小的区别——只是增加了一个额外的步骤(客户端的第 5 步或服务器端的第 4 步)。但在这两种情况下,这种区别至关重要——定义网页的 HTML 不是在网页被请求“之后”才生成的。例如,我们可以使用这两种技术来编写一个创建显示当前时间的页面的指令集。

<html>
<head><title>The Punctual Web Server</title></head>
<body>
  <h1>Welcome</h1>
  In Webserverland, the time is exactly
  <INSTRUCTION: write HTML to display the current time>
</body>
</html>

在这种情况下,我们可以使用纯 HTML 编写页面的大部分内容。只是我们无法硬编码当前时间。相反,我们可以编写一个特殊的代码(这将替换此处高亮显示的行),指示 Web 服务器在请求页面时,在客户端的第 5 步或服务器端的第 4 步中生成该 HTML 位。我们将在本章稍后回到这个例子,并了解如何使用 ASP.NET 编写高亮显示的指令。

现在我们将查看各种不同的技术,包括 ASP.NET,并了解每种技术是如何支持逻辑的。

技术概述

我们刚刚看到,提供动态内容的两种模型也是两种截然不同的模型。ASP.NET 属于服务器端模型。但是,我们将查看我们认为最重要的两种模型中的技术,因为我们将在后面的章节中引用一些客户端模型,特别是如果我们提到旧式 ASP。并非所有技术都与 ASP.NET 的工作方式相同,但它们都允许用户达到相同的最终结果——即动态 Web 应用程序。如果 ASP.NET 不是解决您问题的理想方案,那么您可能需要考虑以下技术,同时考虑以下问题:

  • 它们是否支持您使用的平台?
  • 它们是否难以学习?
  • 它们是否易于维护?
  • 它们有长期未来吗?
  • 它们是否有额外的功能,例如解析 XML 的能力?
  • 是否很多人已经在使用了——是否有许多可用工具?
  • 使用它们所需的支持、技能和知识是否容易获得?

现在我们将快速概述每种技术的功能,并在此过程中,尝试让您了解 ASP.NET(及其前身 ASP 技术)在整个图景中的位置。

用于提供动态内容的客户端技术

这些技术中的每一种都依赖于浏览器中内置的模块(或插件)来处理我们前面提到的指令。客户端技术是脚本语言、控件和全功能编程语言的混合体。

JavaScript

JavaScript 是原始的浏览器脚本语言,不要与 Java 混淆。Java 本身就是一种完整的应用程序编程语言。Netscape 最初开发了一种名为 LiveScript 的脚本语言,以增加其 Web 服务器和浏览器系列的交互性。它在 Netscape 2 浏览器版本中引入,当时 Netscape 与 Sun 联手,并将名称更改为 JavaScript。JavaScript 借用了一些 Java 的语法和基本结构(Java 又借鉴了 C 的思想),但其目的不同——并且源自不同的起源(LiveScript 是独立于 Java 开发的)。

例如,虽然 JavaScript 可以控制浏览器行为和内容,但它无法控制文件处理等功能。事实上,出于安全原因,JavaScript 被积极阻止执行此操作。想想看:您不希望网页能够删除您硬盘上的文件,对吗?与此同时,Java 无法像 Web 页面那样控制浏览器,但它可以进行图形处理并执行网络和线程功能。

JavaScript 比 Java 容易学习得多。它旨在创建小型、高效的应用程序,可以执行许多任务,从执行重复性任务到处理用户生成的事件(如鼠标单击、键盘响应等)。

微软在 Internet Explorer 3.0 中引入了他们自己的 JavaScript 版本,称为 JScript,并且一直支持到 IE6(包括 IE6)。它与 Netscape 版本的语言只有细微的差别,尽管在两个浏览器的早期版本中,这些差别原本相当大。

VBScript

在 Internet Explorer 3.0 中,微软还引入了他们自己的脚本语言 VBScript,它基于其 Visual Basic 编程语言。VBScript 旨在成为 JavaScript 的直接竞争对手。在功能方面,两者之间没有太大区别;更多的是个人偏好——VBScript 在很大程度上是微软 Visual Basic 语言的一个子集。然而,它有一个优势,使其对新手程序员更具吸引力,即与 JavaScript 不同,它不区分大小写,因此在代码细节方面不那么挑剔。尽管这个“优势”使其速度更慢、效率更低。

最大的缺点是,没有一款非微软浏览器支持客户端脚本的 VBScript。曾有一段时间,Netscape 有一些专有的插件提供了 VBScript 支持,但这些插件从未流行起来。您会发现 JavaScript 使用更广泛,支持也更好。如果您想在 Internet 上进行 Web 页面的客户端脚本编写,那么 JavaScript 是唯一选择的语言。事实上,微软自己在 .NET Framework 中用 VB.NET 替换了 VBScript。VBScript 仅应在处理仅包含 IE on Windows 的 Intranet 页面时考虑。

对于 JavaScript 和 VBScript,浏览器中都内置了一个称为脚本引擎的模块,该模块动态处理指令,或者在这种情况下称为脚本。

ActiveX 控件

ActiveX 控件是一个独立的程序(或组件),用 C++ 或 Visual Basic 等语言编写。当添加到网页时,它提供特定的客户端功能,例如条形图、计时器、客户端身份验证或数据库访问。ActiveX 控件通过 <object> 标签添加到 HTML 页面中,该标签现在是 HTML 标准的一部分。ActiveX 控件可以在嵌入 Web 页面时由浏览器执行。

有一个问题。ActiveX 控件由微软开发,尽管与 HTML 标准兼容,但在版本 6 之前(截至撰写本文时仍处于 beta 版)的任何 Netscape 浏览器上都不支持,除非有 ActiveX 插件。没有这个,它们只能在 Internet Explorer 上运行。另外,与 VBScript 不同,ActiveX 能够操作用户机器上的项目,如文件或 Windows 注册表。因此,它经常被认为是一个安全风险,甚至不允许通过防火墙。因此,ActiveX 控件仍然不能真正被认为是使页面动态化的通用或跨平台方法,并且正在逐渐被淘汰。

Java applets

Java 是一种用于开发应用程序的跨平台语言。当 Java 在 20 世纪 90 年代中期首次进入 Web 时,它引起了巨大的轰动。其理念是使用 Java 代码的形式的 applet,这些 applet 本质上是 Java 组件,可以通过 <applet> 标签轻松插入到网页中。

Java 比脚本语言具有更好的功能,在图形功能和文件处理等方面提供更强大的能力。Java 能够提供这些强大的功能而不损害安全性,因为 applet 在所谓的沙箱中运行——这可以防止从 Web 下载的恶意程序损害您的系统。Java 还通过 JDBC 提供了强大的数据库支持。

微软和 Netscape 浏览器都通过称为 Java 虚拟机(JVM)的东西内置了 Java 支持,并且有几个标准的 <object> 和非标准的 <applet> 标签用于将 Java applet 添加到网页中。这些标签告诉浏览器从服务器下载 Java 文件,并使用浏览器内置的 Java 虚拟机执行它。当然,Web 页面构建阶段的这个额外步骤意味着 Java applet 可能需要一段时间才能下载,并且在浏览器上处理的时间可能更长。因此,虽然较小的 Java applet(提供下拉菜单和动画等功能)在 Web 上非常流行,但较大的 applet 仍然不如脚本页面普及。

尽管 Java 今天的受欢迎程度并不像有些人预期的那样,但它仍然是希望转向更复杂语言的人的理想教学工具;其多功能性使其非常适合编程 Web 应用程序。

Curl

一项非常新的创新来自一家由 Tim Berners-Lee(Web 和 HTML 语言的创新者)部分创立的公司。Curl 也是一种类似 Java 的编程语言,但与 Java 不同的是,Java 需要第二个文件(或更多文件)与 HTML 文件一起下载,而 Curl 完全替换了 HTML 源和 Java 文件。它依赖于浏览器首先安装 Curl 插件,并且目前仅适用于非常新的浏览器。优点是下载时间比 Java 快,而且您不必担心将不同语言集成到页面中,因为 Curl 能够提供与 Java 和 JavaScript 相同的特性。

Curl 仍处于开发的非常早期阶段,尽管第一个版本已经发布,更多详细信息可以在 http://www.curl.com 获得。

用于提供动态内容的服务器端技术

这些技术中的每一种都依赖于添加到 Web 服务器而不是浏览器的模块附件。因此,Web 服务器只将 HTML 和任何客户端脚本发送回浏览器。换句话说,没有服务器端代码被发送回来。服务器端技术比客户端技术具有更一致的外观和感觉,并且在服务器端技术之间移动(除了 CGI)所需的额外学习时间并不多。

CGI

Common Gateway Interface (CGI) 是一种在服务器上创建脚本的机制,然后可以使用这些脚本来创建动态 Web 应用程序。CGI 是添加到 Web 服务器的模块。它比 ASP 存在的时间要长得多,而且现在,相当大比例的动态创建网页是使用 CGI 和脚本语言创建的。但是,假设 CGI 和 ASP.NET 或 ASP 做同样的事情是错误的。相反,CGI 允许用户在 Web 服务器上调用另一个程序(例如 Perl 脚本)来创建动态网页,而 CGI 的作用是将用户提供的数据传递给该程序进行处理。但是,它提供了相同的最终结果——一个动态 Web 应用程序。

您应该注意 CGI 存在一些严重的缺点:

  • 初学者很难学会如何编程这类模块。

  • CGI 需要大量的服务器资源,尤其是在多用户环境中。

    它为我们创建动态内容的服务器端模型增加了一个额外的步骤:即,在页面在服务器上处理之前,有必要运行 CGI 程序来创建动态页面。

    更重要的是,CGI 接收和传输数据的格式意味着许多编程语言难以轻松操作数据,因此您需要一种具有良好文本处理和与其他软件通信功能的语言。在任何操作系统上都能胜任这项工作的最强大的编程语言是 C、C++ 和 Perl。虽然它们可以胜任我们的工作,但它们是最难学的语言之一。Visual Basic 没有提供足够的文本处理功能,因此很少与 CGI 一起使用。

    尽管如此,CGI 仍然在许多大型网站上非常流行,尤其是在运行 Unix 操作系统的网站上。它还在许多不同的平台上运行,这将确保其持续的受欢迎程度。

    ASP

    Active Server Pages (ASP) 现在被称为“经典 ASP”,如果您在本章中看到此术语,我们将用它来描述任何不是 ASP.NET 的 ASP。ASP 通常依赖于 JavaScript 或 VBScript 脚本语言(尽管也可以使用安装在 Windows 上的任何脚本语言,如 PerlScript)来创建动态网页。ASP 是一个模块(asp.dll 文件),您将其附加到 Web 服务器,然后它在 Web 服务器上处理 JavaScript/VBScript,并将其转换为 HTML,然后再将其发送到服务器,而不是在浏览器上进行处理。

    ASP 允许我们几乎使用 Windows 提供的任何功能,如数据库访问、电子邮件、图形、网络和系统功能,并且所有这些都可以在典型的 ASP 页面中完成。然而,ASP 的缺点是它在性能方面非常、非常慢。它还仅限于使用脚本语言。它无法执行全功能编程语言所能做的所有事情。其次,脚本语言,就像完整编程语言的“初级”版本一样,采取了许多捷径来使语言更小。其中一些捷径使得它们的程序比必要的要长而复杂。正如我们将要看到的,ASP.NET 通过使代码更结构化、更容易理解和更短来纠正了其中许多问题。

    JSP

    JavaServer Pages (JSP) 是一种允许您将标记(HTML 或 XML)与 Java 代码结合以动态生成网页的技术。JSP 规范由多个 Web 服务器实现,与 ASP 不同,ASP 仅在 IIS 下支持,并且有插件允许您将 JSP 与 IIS 4.0/5.x 一起使用。JSP 的主要优点之一是代码在不同服务器之间具有可移植性。JSP 还非常强大,比 ASP 更快,并且对 Java 程序员来说非常熟悉。它允许 Java 程序利用 Java2 平台的功能,如 JavaBeans 和 Java 2 库。JavaServer Pages 与 ASP 没有直接关系,但它确实能够通过服务器端标签将 Java 代码嵌入到您的网页中。有关更多详细信息,请访问官方网站 http://www.javasoft.com/products/jsp/index.html 和 JSP FAQ http://www.esperanto.org.nz/jsp/jspfaq.html。

    ColdFusion

    ColdFusion (http://www.macromedia.com/software/coldfusion/) 也允许服务器在服务器构建 HTML 页面时访问数据。ColdFusion 是安装到 Web 服务器上的一个模块。与 ASP 一样,ColdFusion 页面可以被任何浏览器读取。ColdFusion 还利用了一套专有的标签,这些标签由 ColdFusion Server 软件处理。该服务器软件可以在多个平台上运行,包括 IIS、Netscape Enterprise Server 和 Unix/Apache。主要区别在于,虽然 ASP.NET 解决方案主要使用编程语言和对象构建,但 ColdFusion 使用类似 HTML 的标签来封装功能。一个缺点是 ColdFusion 软件不是免费的,事实上,您可能会花费超过一千美元来获得在 Web 服务器上运行 Cold Fusion 的特权。

    PHP

    PHP(最初是 Personal Home Pages,但后来是 PHP HyperText Preprocessor)是另一种用于创建动态网页的脚本语言。当访问者打开页面时,服务器会处理 PHP 命令,然后将结果发送给访问者的浏览器,就像 ASP.NET 或 ColdFusion 一样。然而,与 ASP.NET 或 ColdFusion 不同的是,PHP 是开源的并且是跨平台的。PHP 在 Windows NT 和许多 Unix 版本上运行,并且可以构建为 Apache 模块,也可以作为可以作为 CGI 运行的二进制文件。当构建为 Apache 模块时,PHP 特别快。一个缺点是您必须单独下载 PHP,并经历一系列相当复杂的步骤才能在您的机器上安装并运行它。此外,PHP 的会话管理直到 PHP 4 才存在,即使现在仍然不如 ASP。

    PHP 的语言语法类似于 C 和 Perl。对于没有编程经验的人来说,这可能是一个障碍,但如果您有这两种语言的背景,您可能会想看看。PHP 还有一些基本的面向对象功能,提供了一种组织和封装代码的有用方法。您可以在 https://php.ac.cn 上找到有关 PHP 的更多信息。

    ASP.NET

    那么,您为什么要告诉我所有这些其他技术,如果我们只学习 ASP.NET 的话,您可能会想知道?希望您能看到技术之间的相似性,这将有助于您理解 ASP.NET。

    ASP.NET 还依赖于附加到 Web 服务器的模块。然而,ASP.NET 模块(一个名为 aspnet_isapi.dll 的物理文件)本身并不完成所有工作;它将一部分工作交给 .NET Framework 来处理。与其在本节中讨论 ASP.NET,不如将其作为一个独立的实体来讨论,因为它是本书的重点。

    什么是 ASP.NET?

    我们将在本书中多次问这个问题,每次问的时候,我们都会给您一个更深入的答案。如果我们现在给您一个完整的答案,您会被一些迄今为止毫无意义的术语所淹没。因此,每次描述它时,您可能会意识到一些未解答的问题。

    我们在本章开头给出的原始定义是“ASP.NET 是一项用于创建动态网页的新兴且强大的技术”,这一点仍然成立。然而,正如您现在所知,它并不是提供动态网页的唯一方法,所以让我们稍微修改一下我们的定义,使其变为:

    一种用于创建动态网页的新兴且强大的服务器端技术。

    其次,ASP.NET 并不是我们唯一感兴趣的东西。事实上,它是构成 Microsoft .NET Framework 的一系列技术之一。目前,您可以将其视为一个用于创建各种应用程序的庞大工具集,特别是用于创建 Web 应用程序。当我们安装 ASP.NET 时,我们也将同时安装 .NET Framework,并且我们将在本书中使用 .NET Framework 的各个部分。

    ASP.NET 与 ASP 有何不同?

    别急!我们才刚到这部分。如前所述,ASP 仅限于使用脚本语言,主要是 JavaScript 或 VBScript(尽管也可以是 Windows 系统支持的任何脚本语言)。我们将代码添加到页面的方式与添加客户端脚本相同,这会导致代码混乱和功能受限等问题。ASP.NET 没有这些问题。

    首先,ASP.NET 允许您使用更广泛的全功能编程语言,并且还允许您充分利用 .NET Framework 的丰富潜力。它能帮助您使用 .NET Framework 支持的任何编程语言创建更快、更可靠的动态网页。原生支持的典型语言是 VB.NET、C# 和一种名为 JScript.NET 的新版 JavaScript。此外,预计第三方开发者将创建 Perl、Python 等语言的版本来与 ASP.NET 一起使用。是的,在你问之前,我们不指望你了解这些编程语言中的任何一种。我们将选择一种语言,VB.NET,并用它来教你 ASP.NET。我们选择 VB.NET 是因为它可能是初学者中最简单的,并且它几乎可以做到我们提到的其他语言可以做的任何事情。最后,也是最重要的,我们选择 VB.NET 是因为它与 ASP.NET 免费提供——所以当你安装 ASP.NET 时,你也得到了 VB.NET。

    此时,您可能会想:“等等,我必须弄懂 VB.NET,然后我必须掌握 ASP.NET——这听起来需要学的东西太多了。”别担心;您不会学习两种语言。如我们从一开始所说,ASP.NET 不是一种语言——它是一种技术。这种技术可以通过一种编程语言来访问。我们将要做的就是随着学习 VB.NET 来学习 ASP.NET 的特性。换句话说,您将使用 VB.NET 来创建网页,并使用 ASP.NET 来驱动它。但是,在你匆忙去买一本 VB.NET 书之前,我们将仅从创建动态网页的角度来处理这门语言。

    总而言之,ASP.NET 是一种服务器端技术,它允许我们使用全功能的编程语言来创建您的网页。

    我仍然对 ASP、ASP.NET 和 VB.NET 感到困惑

    在脑海中区分这些术语非常重要,因此在我们继续安装和运行 ASP.NET 之前,我们将回顾并重新定义它们,以确保我们都清楚。

    • ASP – 一种用于创建动态网页的服务器端技术,它只允许您使用脚本语言。
    • ASP.NET – 一种用于创建动态网页的服务器端技术,它允许您使用 .NET 支持的任何全功能编程语言。
    • VB.NET – 我们选择的用于编写 ASP.NET 代码的编程语言。

    现在是时候安装了。

    安装过程

    安装将分三个步骤进行。我们将首先安装 Web 服务器,然后,我们将安装 ASP.NET 工作所需的前提条件,最后,我们将安装 ASP.NET Premium Edition 或 .NET Framework SDK(其中也包含 ASP.NET)。

    SDK 是 Software Development Kit(软件开发工具包)的缩写,SDK 之间唯一的真正区别在于它们提供的大量额外文档和示例。

    任何熟悉 ASP 的人可能习惯于它与 Web 服务器一起自动安装,从而一次性完成所有工作。这是正确的——经典 ASP 仍然随 Web 服务器一起安装,但是 ASP.NET 目前仅作为单独的下载提供。这意味着您需要从微软网站或 CD(如果您有)下载 ASP.NET。但是,在安装 ASP.NET 之前,必须有一个工作的 Web 服务器。

    如果您已经安装了 IIS 5.x,或者已经安装了 Windows 2000 Server 或 Advanced Server 操作系统,那么好消息是您可以跳过此部分,直接继续关于安装 .NET Framework 的部分。但对我们其他人来说,您将不得不仔细关注下一部分。

    安装 IIS 5.x Web 服务器

    我们将一起查看 Windows 2000 Professional 和 Windows XP Professional 上 IIS 的安装过程,因为它们没有显著差异。主要区别在于 Windows 2000 安装的是 IIS 5.0,而 Windows XP 安装的是 IIS 5.1。安装选项完全相同,唯一可能不同的是对话框的外观。但是,您需要选择的选项仍然是相同的。

    在安装之前,值得注意的是,在此初始阶段我们可能不需要做太多工作,因为您可能已经在运行 IIS 5.x。我们将作为安装过程的一部分来描述检查这种情况的过程。您还应该注意,要在 Windows 2000/XP 上安装任何东西(不仅是 ASP.NET,而是字面上任何东西),您都需要以具有管理员权限的用户身份登录。如果您不确定如何执行此操作,我们建议您查阅 Windows 文档。好了,让我们开始吧!

    尝试一下——在我的 Web 服务器机器上查找和/或安装 IIS 5.x

    1. 转到控制面板(开始 | 设置 | 控制面板)并选择“添加/删除程序”图标。将出现以下对话框,显示您当前已安装程序的列表。

    2. 选择对话框左侧的“添加/删除 Windows 组件”图标,进入允许您安装新 Windows 组件的屏幕。

    3. 在对话框中找到 Internet Information Services (IIS) 条目,并注意其左侧的复选框。除非您通过自定义安装并专门请求 IIS 来安装 Windows 2000,否则很可能该复选框未被选中(如上所示)。

    4. 如果复选框已“清除”,则勾选该复选框并单击“下一步”以加载 Internet Information Services 5.x。您可能会被提示将 Windows 2000/XP 安装盘放入 CD-ROM 驱动器。这将需要几分钟才能完成。然后转到步骤 5。

      或者

      如果复选框已“勾选”,则您无需安装 IIS 5.x 组件——它已存在于您的机器上。请转到步骤 6。

    5. 单击“详细信息”按钮——这将带您到如下所示的对话框。这里有一些用于安装各种可选功能的小选项。例如,如果选中了 World Wide Web Server 选项,那么我们的 IIS 安装将能够提供和管理网页和应用程序。如果您计划使用 FrontPage 2000 或 Visual InterDev 来编写网页代码,那么您需要确保选中 FrontPage 2000 Server Extensions 复选框。Internet Information Services Snap-in 也非常理想,因为我们稍后将在本章中看到,所以请确保也选中它。

      为本次安装起见,请确保此对话框中的所有复选框都已选中;然后单击“确定”返回到上一个对话框。

    6. 我们还需要安装另一个组件,供本手册稍后使用——那就是脚本调试器。如果您滚动到我们上面显示的 Windows 组件向导对话框的底部,您会找到“脚本调试器”复选框。如果尚未选中,请立即选中它,然后单击“下一步”以完成安装。否则,如果 IIS 5.x 和脚本调试器都已存在,则可以单击“取消”中止该过程。

    工作原理

    Web 服务在安装完成后立即自动启动,之后,每次启动 Windows 时都会启动——因此您无需运行任何进一步的启动程序,或像启动 Word 或 Excel 那样单击任何快捷方式。

    IIS 将其大部分组件安装在硬盘上,位于 \WinNT\system32\inetsrv 目录下;然而,目前更让我们感兴趣的是同时创建的 \InetPub 目录。该目录包含子目录,将为我们创建的网页文件提供主页。

    展开 InetPub 目录,您会发现它包含几个子目录:

  • \iissamples\homepage 包含一些经典的 ASP 示例页面。

  • \iissamples\sdk 包含一组子目录,其中包含演示各种经典 ASP 对象和组件的经典 ASP 页面。

  • \scripts 是一个空目录,ASP.NET 程序可以存储在此处。

  • \webpub 也为空。这是一个“特殊”虚拟目录,用于通过发布向导发布文件。请注意,仅当您使用 Windows 2000 Professional Edition 时,此目录才存在。

    \wwwroot 是您网站(或网站)的根目录。这应该是您的默认 Web 目录。它还包含 IIS 的各种组件的若干子目录。此目录通常用于包含构成我们网站的页面的子目录——尽管实际上,您也可以将页面存储在其他地方。我们将在本章后面讨论物理目录和虚拟目录之间的关系。

  • \ftproot、\mailroot 和 \nntproot 应构成任何使用 FTP、邮件或新闻服务(如果已安装)的站点的根目录。

  • 在某些 Windows 版本中,您会找到一个 \AdminScripts 文件夹,其中包含用于在 Web 服务器上执行一些常见“维护”任务的各种 VBScript 文件,允许您启动和停止服务。

    使用 IIS

    在我们的机器上安装了 IIS Web 服务器软件后,我们需要一种方法来管理其内容和设置。在本节中,我们将介绍 IIS 5.x 提供的用户界面。

    事实上,某些版本的 IIS 5.x 提供了两个用户界面:MMC 和 PWS 界面。我们只看其中一个,因为另一个版本现在已经过时了。我们将使用的版本是 Microsoft Management Console (MMC),这是一个管理各种服务的通用方法。让我们快速看一下。

    Microsoft Management Console (MMC)

    MMC 的优点在于它为管理您机器上安装的各种服务提供了一个中央界面。我们可以使用它来管理 IIS——但实际上,当我们用它来管理其他服务时,界面看起来大致相同。MMC 是 Windows 2000 操作系统的一部分——事实上,MMC 也随旧版 Windows 服务器操作系统提供。

    MMC 本身只是一个外壳——它本身并没有做什么。如果我们想用它来管理一项服务,我们必须为其服务添加一个管理单元。好消息是 IIS 5.x 有自己的管理单元。每当您需要管理 IIS 时,都可以通过选择“开始”|“控制面板”|“管理工具”|“Internet 服务管理器”来调用 Internet 服务管理器 MMC 控制台。

    打开 MMC 中的 IIS 管理单元后,您可以从此窗口执行所有 Web 管理任务。可以通过“默认 Web 站点”节点访问 Web 站点的属性。我们将在本章后面更详细地使用 MMC。

    测试安装

    接下来要做的是测试 Web 服务器,看看它是否正常工作并按预期提供页面。我们已经注意到 Web 服务应在 IIS 安装后立即启动,并且每次启动计算机时都会重新启动。在本节中,我们将尝试一下。

    为了测试 Web 服务器,我们将启动浏览器并尝试查看一些我们知道已放置在 Web 服务器上的网页。为了做到这一点,我们将需要输入一个 URL(统一资源定位符)到浏览器的地址框中,就像我们在 Internet 上浏览时经常做的那样。URL 是一个 http://... 网页地址,它指示要连接到哪个 Web 服务器以及我们想要查看的页面。

    我们使用什么 URL 来浏览到我们的 Web 服务器?如果您的 Web 服务器和 Web 浏览器通过局域网连接,或者您在同一台机器上同时使用 Web 服务器和浏览器,那么在 URL 中指定 Web 服务器机器的名称就足够了。

    识别您的 Web 服务器名称

    默认情况下,IIS 将从计算机名称中获取 Web 服务器的名称。您可以在计算机的网络设置中更改此项。如果您没有设置,Windows 会自动生成一个——请注意,此自动生成的名称可能不太好记;可能类似于“P77RTQ7881”。要查找您自己的 Web 服务器机器的名称,请选择“开始”|“设置”|“网络和拨号连接”,然后从“高级”菜单中选择“网络标识”。“网络标识”选项卡将在“完整计算机名称”下显示您的计算机名称。

    我的机器名称是 chrisu,(如您所见,以及在上面 IIS 管理单元对话框的屏幕截图中)我的 Web 服务器也采用了相同的名称。在局域网(或从同一台机器)上浏览此机器上的页面时,我可以使用以 http://chrisu/... 开头的 URL。

    如果您在同一台机器上同时用作 Web 服务器和浏览器,则有两种替代方法。尝试 http://127.0.0.1/...——这里,127.0.0.1 是一个环回地址,它会导致请求发送到本地机器上的 Web 服务器。或者,尝试 https:///...——“localhost”是 127.0.0.1 地址的别名——您可能需要检查 LAN 设置(在浏览器的选项中)以确保本地浏览不通过代理服务器。

    在本书的整个过程中,在任何需要您指定 Web 服务器名称的示例中,服务器名称将显示为 localhost,隐式假设您的 Web 服务器和浏览器运行在同一台机器上。如果它们位于不同的机器上,那么您只需替换相应的 Web 服务器机器的计算机名称。

    浏览到您的 Web 服务器上的页面

    现在您知道了 Web 服务器的名称,并且 Web 服务正在运行;您可以通过浏览器访问它们来查看托管在 Web 服务器上的一些经典 ASP 页面。让我们通过查看我们的默认主页来测试这个理论。

    尝试一下——测试 Web 服务

    • 为了验证 Web 服务是否正常工作,请启动您的浏览器,然后在地址框中输入 http://my_server_name/localstart.asp。(我的服务器名为 chrisu,所以我输入了 http://chrisu/localstart.asp。)现在按 Enter;如果一切正常,您应该会看到一个像这样的页面。

    请注意,这里看到的默认页面使用了 .asp 扩展名,表示这是一个经典 ASP 页面。IIS 5.x Web 服务器程序标准包含对 ASP 3 的支持。

    如果这不起作用怎么办?

    如果您没有看到这个页面,那么请看看以下步骤,我们将尝试解决问题。如果它没有正常工作,那么很可能您会看到这个屏幕。

    如果您看到此页面,则可能意味着很多事情,但最可能的问题之一是您的 Web 服务未开启。要开启 Web 服务,您首先需要启动我们之前在本章中描述的 IIS 管理单元(选择“开始”|“运行”,键入 MMC 并按 Enter;然后从 MMC 的“控制台”菜单中选择“打开”,并从对话框中找到 iis.msc 文件。或者,只需使用您在那里创建的快捷方式)。

    现在,单击管理单元左窗格中根节点的 + 号,以显示“默认站点”。然后右键单击“默认 Web 站点”,并选择“启动”。

     

    如果仍然不起作用,那么这里还有一些建议,它们基于您 PC 设置的特定方面。如果您正在网络上运行并使用代理服务器(一种管理内部防火墙到外部世界的连接的软件——如果您没有,请不要担心,它们主要由大公司使用),那么它可能会阻止您的浏览器访问您的 Web 服务器。大多数浏览器都会给您绕过代理服务器的机会。

    • 如果您正在使用 Internet Explorer,您需要转到“查看”|“Internet 选项”(IE4)或“工具”|“Internet 选项”(IE5/IE6)并选择“连接”选项卡。在 IE5/IE6 中,单击“LAN 设置”按钮并选择“对本地地址不使用代理服务器”。在 IE4 中,此部分构成了“连接”对话框的一部分。

    • 如果您正在使用 Netscape Navigator(4.x 或 6.x 版本),并且遇到问题,那么您需要关闭所有代理服务器,并确保您直接访问 Internet。为此,请选择“编辑”|“首选项”;在出现的对话框中,从左侧的“类别”框中选择“高级”|“代理”。然后,在右侧,选择“直接连接到 Internet”选项,然后单击“确定”。尽管您不会在线浏览 Internet,但它将允许 Netscape Navigator 识别各种访问本地 ASP.NET 页面的方式,例如 http://127.0.0.1、https:// 等。

    如果您的机器名称与 Internet 上某个网站的名称相似,您可能会遇到问题——例如,如果您的机器名称是 jimmyd,但碰巧有一个名为 http://www.jimmyd.com 的公共网站。当您在浏览器的地址框中键入 http://jimmyd 时,期望查看本地 Web 服务器上的页面,但意外地跳转到了 http://www.jimmyd.com。如果发生这种情况,那么您需要确保在浏览器设置中没有使用代理服务器——同样,这可以使用“Internet 选项”|“连接”对话框或“编辑”|“首选项”对话框来禁用。

    最后,如果您的 Web 服务器在家用机器上通过调制解调器运行,并且您收到一条错误消息,告知您的网页已离线,这实际上可能是 Web 服务器的误判。这可以通过更改浏览器查找页面的方式来纠正。为此,请选择“查看”|“Internet 选项”(IE4)或“工具”|“Internet 选项”(IE5/IE6),选择“连接”选项卡,然后选择“从不拨号连接”。

    当然,您可能会遇到上面未回答的问题。在这种情况下,很可能与您自己的特定系统设置有关。我们无法在此涵盖所有可能的配置;但如果您找不到问题所在,您可能会在本章后面列出的某个网站和新闻组中找到一些帮助。

    管理 Web 服务器上的目录

    在安装 ASP.NET 之前,我们需要在 IIS 中做最后一次停靠。这是因为当您运行 ASP.NET 页面时,您需要了解将页面放在哪里,以及如何确保您有权访问它们。由于这由 IIS 管理,现在似乎是最好的时机。

    如今,许多浏览器已经足够先进,您可以使用它们来查找和检查您计算机硬盘上的文件和页面。例如,您可以启动浏览器,输入网页(或其他文件)的物理位置,例如 C:\My Documents\mywebpage.html,浏览器就会显示它。然而,这根本不是真正的 Web 发布。

    首先,网页是通过称为 HTTP(超文本传输协议)的协议传输的。请注意,URL 开头的 http:// 表示请求是通过 HTTP 发送的。在浏览器中请求 C:\My Documents\mywebpage.html 不使用 HTTP,这意味着文件没有以 Web 页面应有的方式传输和处理。在这种情况下,不会进行服务器处理。我们将在第 2 章讨论 HTTP 时更详细地讨论这一点。

  • 其次,考虑寻址情况。字符串 C:\My Documents\mywebpage.html 告诉我们该页面存在于“运行浏览器的机器”的硬盘的 C: 驱动器的 \My Documents 目录中。在多台计算机的网络环境中,这根本不足以提供 Web 服务器的信息。

    但是,当用户通过 HTTP 浏览 Web 服务器上的网页时,Web 服务器需要弄清楚该页面的文件位于服务器硬盘的哪个位置。事实上,URL 中的信息与包含页面源代码的文件的物理位置(在 Web 服务器的文件系统中)之间存在重要关系。

    虚拟目录

    那么 URL 中的信息与物理位置之间的关系是如何工作的呢?实际上,可以通过在 Web 服务器机器上创建第二个目录结构来实现,该结构反映了您的 Web 站点的结构。听起来可能很复杂,但并非如此。事实上,在本书中,它将非常简单。

    第一个目录结构是我们打开 Web 服务器上的 Windows 资源管理器时看到的——这些目录称为物理目录。例如,文件夹 C:\My Documents 是一个物理目录。

    第二个目录结构反映了 Web 站点的结构。它由一个虚拟目录层次结构组成。我们使用 Web 服务器来创建虚拟目录,并设置虚拟目录与真实(物理)目录之间的关系。

    当您尝试可视化虚拟目录时,最好不要将其视为目录。相反,只需将其视为 Web 服务器机器上存在的物理目录的昵称或别名。想法是,当用户浏览到服务器上物理目录中包含的网页时,他们不使用“物理”目录的名称来访问,而是使用物理目录的昵称。

    为了说明这一点可能有多大用处,请考虑一个发布各种体育赛事新闻的网站。为了仔细组织他的 Web 文件,WebMaster 在硬盘上构建了一个物理目录结构,如下所示:

    现在,假设您访问此网站以获取奥运会标枪项目的最新消息。如果此网页的 URL 基于物理目录结构,那么此页面的 URL 将如下所示:

    http://www.oursportsite.com/sportsnews/athletics/field/javelin/default.asp

    对于理解其目录结构的 WebMaster 来说,这还可以;但这是一个相当令人难忘的 Web 地址!因此,为了让“用户”更容易,WebMaster 可以为该目录分配一个“虚拟”目录名称或“别名”——它就像目录的昵称一样。这里,假设我们将虚拟名称 javelinnews 分配给 c:\inetpub\...\javelin\ 目录。现在,最新的标枪新闻的 URL 是:

    http://www.oursportsite.com/javelinnews/default.asp

    通过为所有目录(例如 baseballnews、100mnews、200mnews 等)创建虚拟目录名称,用户可以轻松输入 URL 并直接转到他们想要的页面。

    http://www.oursportsite.com/baseballnews/default.asp

    http://www.oursportsite.com/100mnews/default.asp

    http://www.oursportsite.com/200mnews/default.asp

    这不仅可以节省用户输入长而笨拙的 URL 的麻烦——它还充当了良好的安全措施,因为它隐藏了物理目录结构,使所有网站访问者都看不到。这是个好习惯,否则黑客可能会通过 Web 推断并访问我们的文件。此外,它允许 WebMaster 的网站结构独立于其硬盘上的目录结构——因此他可以将磁盘上的文件移动到不同的物理文件夹、驱动器,甚至服务器,而无需更改其网页的结构。还需要考虑性能开销,因为 IIS 必须花费精力来翻译物理路径。拥有过多的虚拟目录在性能方面可能非常昂贵。

    我们来尝试设置自己的虚拟目录和权限(请注意,如果您使用 FrontPage 编辑器创建新站点,这些权限会自动设置——因此,除非您知道自己在做什么,否则不要使用 FrontPage 来为您设置此站点)。

    尝试一下——创建虚拟目录并设置权限

    现在让我们快速看一下如何创建自己的虚拟目录。我们将使用此目录来存储我们将在本书中创建的示例。我们不想通过创建大量目录来使此示例过于复杂,因此我们将通过在 Web 服务器硬盘上创建一个物理目录,并使用 IIS 管理工具创建虚拟目录并建立两者之间的关系来演示。

    1. 启动 Windows 资源管理器,在硬盘的根目录下创建一个名为 BegASPNET 的新物理目录。例如,C:\BegASPNET\

    2. 接下来,启动 IIS 管理工具(使用 MMC,如我们之前描述的)。右键单击“默认 Web 站点”,然后从出现的菜单中选择“新建”|“虚拟目录”。这将启动“虚拟目录创建向导”,它会为您处理虚拟目录的创建和权限的设置。您将首先看到欢迎屏幕,如下所示。单击“下一步”。

    3. 在“别名”文本框中键入 5040(本书 ISBN 的缩写,在封底找到);然后单击“下一步”。

    4. 单击“浏览…”按钮,然后选择您在步骤 1 中创建的 \BegASPNET 目录。然后单击“下一步”。

    5. 确保选中了“读取”和“运行脚本”复选框,并且“执行”复选框为空。单击“下一步”,然后在随后的页面上,单击“完成”。

    6. BegASPNET 虚拟目录将出现在 IIS 管理窗口的树中。

    工作原理

    我们刚刚创建了一个名为 BegASPNET 的物理目录,该目录将在本书中用于存储我们的代码示例。来自 wrox.com 的下载文件也设计为遵循此结构。在此目录中,我们建议为每个章节创建一个子目录以保持整洁(这不必是虚拟目录——只需一个物理目录)。

    您还创建了一个名为 5040 的虚拟目录,该目录是作为物理 BegASPNET 目录的别名创建的。如果我们创建第 1 章的示例,并将 ASP.NET 文件放在物理 C:\BegASPNET\ch01 目录中;您可以使用浏览器访问存储在此文件夹中的页面。您将需要使用 URL http://my_server_name/5040/ch01/…

    您还应该注意到,URL 使用别名 /5040——IIS 知道这代表目录路径 C:\BegASPNET。在执行 ASP.NET 页面时,您可以通过在 URL 中使用虚拟目录名称来替换物理目录名称,从而减少输入 URL 所需的字符数。

    我们还设置了读取和运行权限——必须设置这些权限,否则 IIS 安全功能将阻止您运行任何 ASP.NET 页面。执行复选框留空,因为允许他人运行您自己机器上的应用程序是感染病毒或被黑客攻击的稳妥方法。我们现在将更仔细地研究权限,因为它们非常重要。如果分配不正确,您可能会发现无法运行任何 ASP.NET 页面——或者更糟的是,任何人都可以通过 Web 访问您的机器,并修改(甚至删除)您的文件。

    权限

    正如我们刚才所见,我们可以在创建新目录时使用“虚拟目录向导”中提供的选项为其分配权限。或者,我们随时可以从 MMC 中的 IIS 管理工具设置权限。为此,请在 IIS 管理工具中右键单击 5040 虚拟目录,然后选择“属性”。您将看到以下对话框。

    这是一个相当复杂的对话框,包含许多选项,我们现在不必全部详细介绍。

    访问权限

    左侧的四个复选框对我们很重要,因为它们控制给定目录的访问类型,并决定允许在目录中包含的文件上设置的权限。让我们看看这些选项的含义。

    脚本源访问 - 此权限允许用户访问 ASP.NET 页面的源代码。只有在已分配了“读取”或“写入”权限的情况下,才允许此权限。但我们通常不希望用户能够查看我们的 ASP.NET 源代码,因此对于包含 ASP.NET 页面的任何目录,我们通常会将其复选框留空。默认情况下,安装过程中创建的所有目录都禁用脚本源访问权限。您应该保持原样。

    读取 - 此权限允许浏览器读取或下载存储在主目录或虚拟目录中的文件。如果浏览器请求一个未启用“读取”权限的目录中的文件,则 Web 服务器将简单地返回错误消息。请注意,当文件夹关闭“读取”权限时,文件夹中的 HTML 文件将无法读取;但文件夹中的 ASP.NET 代码仍然可以运行。通常,您希望发布的包含信息的目录(例如 HTML 文件)应启用“读取”权限,就像我们在“动手实践”中所做的那样。

    写入 - 如果启用了虚拟目录上的写入权限,则用户将能够创建或修改目录中的文件,以及更改这些文件的属性。出于安全原因,通常不启用此选项,我们不建议您更改它。

    目录浏览 如果您想允许用户查看目录的内容(即,查看目录中所有文件的列表),则可以通过选中“目录浏览”选项来实现。

    如果有人尝试浏览已启用目录浏览但禁用了读取权限的目录,他们可能会收到以下消息。

    出于安全原因,我们建议禁用此选项,除非您的用户有特定需求(例如,在使用 FTP(文件传输协议)从您的网站传输文件时)。如果您不知道 FTP 是什么,那么我们强烈建议您这样做,因为您显然不需要它!

    执行权限

    在“属性”对话框的底部附近有一个名为“执行权限”的下拉列表框,它指定了在该目录中包含的页面上允许的程序执行级别。这里有三个可能的选项:“无”、“仅脚本”或“脚本和可执行文件”。

    将“执行权限”设置为“无”意味着用户只能访问静态文件,如图像文件和 HTML 文件。此目录中包含的任何基于脚本的文件或其他可执行文件对用户来说都是不可访问的。如果您尝试从权限设置为“无”的文件夹运行 ASP.NET 页面,我们将看到以下内容——请注意页面中的“执行访问权限被禁止”消息。

  • 将“执行权限”设置为“仅脚本”意味着用户还可以访问任何基于脚本的页面,例如 ASP.NET 页面。因此,如果用户请求该目录中包含的 ASP.NET 页面,Web 服务器将允许执行 ASP.NET 代码,并将生成的 HTML 发送到浏览器。

  • 将“执行权限”设置为“脚本和可执行文件”意味着用户可以执行目录中包含的任何类型的文件。为了防止用户在您的 Web 服务器上执行可能造成损害的应用程序,通常最好避免使用此设置。

    对于您发布的任何包含 ASP.NET 文件的目录,“脚本和可执行文件”的执行权限设置是“仅脚本”。现在您已经开始熟悉 IIS 了,可以准备您的计算机安装 ASP.NET 本身了。

    安装 ASP.NET 的先决条件

    在安装 ASP.NET 或 .NET Framework 之前,您需要安装 Microsoft Data Access Components (MDAC) 2.7 或更高版本。这是一组组件,可让您使用 ASP.NET 与数据库通信并在网页上显示数据库内容。没有这些组件,您将无法运行本书中的任何数据库示例。这将影响到第 2 章中的示例,因此请不要跳过此阶段!虽然您可能已经安装了早期版本的 MDAC(例如 Windows 2000 的 2.5 版本),但除非您已专门升级,否则很可能您还没有最新版本,仍然需要升级。

    Microsoft Data Access Components 是一个小型下载(约 5 或 6 MB),可从 Microsoft 网站 http://www.microsoft.com/data 免费下载。

    在撰写本文时,Microsoft 尚未将 2.7 版本放在上述 URL,因为它仍在 beta 测试阶段。如果您只能在此位置找到 2.6 版本,我们建议尝试 http://www.microsoft.com/downloads/release.asp?ReleaseID=30134 或者,您可以查看 http://msdn.microsoft.net 以获取最新的 .NET 资源列表。

    MDAC 2.7 的安装相当简单,但我们会快速回顾一下,以确保一切都清晰明了。

    动手实践 - 安装 MDAC 2.7

    1. MDAC 2.7 以文件 MDAC_typ_dnld.exe 的形式提供,您需要运行该文件。运行后,它会要求您指定下载文件的位置。键入一个合适的位置。

    2. 实际上,令人困惑的是,它似乎只将一个文件 MDAC_TYPE.EXE 下载到预先指定的目录。如果您运行此 EXE 文件,它将开始安装过程。

    3. 在同意许可条款后,很可能您会被要求重启系统,它会提前告知您。

    4. 然后,安装过程将继续进行,无需进一步干预,尽管如果之前指定了系统重启,您可能需要等待重启。

    现在您已准备好安装 ASP.NET。

    安装 ASP.NET 和 .NET Framework SDK

    我们几乎准备好安装 ASP.NET 了,但在开始之前有两点重要说明。

    首先,Microsoft 网站上提供两种不同类型的安装:.NET Framework SDK 和 ASP.NET。.NET Framework SDK 已包含 ASP.NET,因此您无需单独下载两者。您只需要下载其中一个。两个下载都包含 ASP.NET、VB.NET 和 .NET Framework。

    ASP.NET Premium Edition 下载是一个较小的、精简的下载,仅包含运行 ASP.NET 和 .NET Framework 所需的基本内容。不包含任何额外的文档或示例。两者之间的尺寸差异很大(ASP.NET 是 18MB,而 .NET Framework SDK 是惊人的 123MB),因此,除非您有 CD 上的 .NET Framework SDK(可以从 Microsoft 网站订购)或宽带高速互联网接入,否则您可能希望下载 ASP.NET 版本。

    别担心,这不会影响您运行本书示例的能力——所有内容都已编写好,可以在 ASP.NET Premium Edition 上运行。虽然您将无法直接访问帮助文件,但所有支持材料都可以在 Microsoft 的 http://www.asp.net 网站上在线获取。

    不要担心替换现有的 Classic ASP 安装,因为 ASP.NET 将与 ASP 并行安装,它们将继续工作,无需我们采取任何操作。

    现在我们将引导您完成 ASP.NET Premium Edition 和 .NET Framework SDK 的典型安装过程。Windows 2000 和 Windows XP 的安装过程相同,因此我们再次只详细介绍前者上的安装过程。尽管 XP 上的向导看起来有点不同,但它会询问完全相同的事情。

    动手实践 - 安装 ASP.NET

    1. 单击 setup.exe,在确认您确实要安装 ASP.NET Premium 后,稍作停顿,您就会进入设置向导。

    2. 单击“下一步”并接受许可协议继续。许可协议之后的下一个对话框将询问您要在何处安装 ASP.NET。

    3. 除非您有充分的理由,否则我们建议将位置保留为设置向导指定的,然后单击“下一步”。ASP.NET 现在将自行安装。

    4. 安装完成后您将收到通知,与 MDAC 2.7 不同,您可能不需要重启。现在我们可以转到测试部分并检查一切是否正常工作。

    安装 .NET Framework SDK

    1. 单击 setup.exe,在确认您确实要安装 .NET Framework SDK 包后,几分钟后,您就会进入设置向导。

    2. 单击“下一步”并接受许可协议继续。许可协议之后的下一个对话框将询问您需要安装 SDK 的哪些不同部分。您应该全部选中,尽管如果您硬盘空间不足,可以选择省略 SDK_Samples 或文档。软件开发工具包是必不可少的。

    3. 单击“下一步”后,您会看到一个对话框,其中指定了不同的 .NET Framework SDK 示例和零碎组件的目标文件夹。您可以选择将它们安装在任何您想要的位置。更重要的是,对话框底部有一个复选框,询问您是否注册环境变量。此复选框应被选中,因为我们将在后面的章节中使用环境变量。

    单击“下一步”,.NET Framework SDK 将顺利安装。它不应需要重启。

    故障排除提示和技巧

    安装过程非常简单,并且能在大多数计算机上运行。但是,有时您计算机的特定配置会阻止其安装。不幸的是,我们无法涵盖所有可能的意外情况,但如果您的计算机无法正常工作,您应该检查是否有足够的硬盘空间,这是最常见的问题原因。还要尽量确保安装过程不会中途被中断,因为没有安装程序能够完全清除已中止安装的所有零碎组件,这可能会在您尝试重新安装时导致问题,并使您需要重新格式化硬盘才能使其正常工作。除此之外,请查看本章后面列出的新闻组和资源。

    ASP.NET 测试示例

    好了,我们现在到了本章的关键部分,检查一切是否正常工作。您还记得本章开头提到的那个准时服务器代码——我们想编写一个显示当前时间的网页?我们现在将回到那个例子。如您所见,这是一段相当简单的代码,但足以检查 ASP.NET 是否正常工作。

    动手实践 - 您的第一个 ASP.NET 网页
    1. 打开一个文本编辑器,输入以下代码。
      <script language="vb" runat="server">
      Sub Page_Load()
      time.text=Hour(Now) & ":" & Minute(Now) & ":" & Second(Now)
      End Sub
      </script>
      <html>
      <head><title>The Punctual Web Server</title></head>
      <body>
        <h1>Welcome</h1>
        In WebServerLand the time is currently:
      <asp:label id="time" runat="server" />
      </body>
      </html>

      我们强烈建议(并且在本书中一直假定)您使用记事本编写本书中的所有示例,因为它始终只会精确地执行您要求的操作,而不会做更多。因此,更容易追踪您遇到的任何问题,并且比排查 FrontPage 或类似网页编辑器引起的问题要容易得多。

    2. 将此页面另存为 punctual.aspx。确保将其保存在您之前创建的物理文件夹 C:\BegASPNET\Ch01\ 中。

      保存文件时,应仔细检查新文件是否具有正确的后缀。它应该是 .aspx,因为这是告诉 Web 服务器页面包含 ASP.NET 代码的方式。请注意,记事本(以及许多其他文本编辑器)将 .txt 视为默认值。因此,在“保存”或“另存为”对话框中,请务必将“另存为类型”更改为“所有文件”或“所有文件(*.*)”,或将路径和文件名放在引号中。
    3. 现在启动您的浏览器,输入以下内容:https:///5040/punctual.aspx

    4. 现在单击浏览器的刷新按钮,显示的日期和时间将发生变化。实际上,浏览器显示的是同一页面的新实例。

    5. 现在在您的浏览器中选择“查看源代码”或类似选项(取决于您使用的浏览器)从浏览器菜单中查看从 Web 服务器发送到浏览器的 HTML 源代码。结果如下所示。您可以看到没有 ASP.NET 代码可见,并且在第一个 <html> 标签之前没有任何内容——ASP.NET 代码已由 Web 服务器处理并用于生成纯 HTML,该 HTML 已硬编码到发送到浏览器的 HTML 源代码中。

      在这里,您可以看到我在 15:39:15 刷新页面时发送到浏览器的 HTML。

    6. 如前所述,您可以在任何浏览器中预期此功能正常工作——因为 ASP.NET 是在 Web 服务器上处理的。如果您有其他浏览器,请尝试一下。

    工作原理

    很简单,不是吗?(如果您第一次没有成功,请不要急着发送电子邮件寻求技术支持——先看看下一节“ASP.NET 故障排除”。)现在,让我们来看看让这个应用程序运转起来的 ASP.NET 代码。

    当然,在整个程序中只有一个 ASP.NET 代码块(忽略服务器控件)。它包含在 <script> 和 </script> 标签中。

    <script language="vb" runat="server">
    Sub Page_Load()
    time.text=Hour(Now) & ":" & Minute(Now) & ":" & Second(Now)
    End Sub
    </script>

    脚本分隔符指定了需要 ASP.NET 运行的代码,我们将在下一章详细介绍它们。如果我们暂时忽略 <script> 标签,只将它们视为 ASP.NET 代码分隔符,那么就剩下三行了。如果我们进一步忽略 Sub Page_Load 和 End Sub 行(这是许多 ASP.NET 程序都通用的,我们将在第 3 章中讨论),我们只剩下最后一行。这一行

    time.text=Hour(Now) & ":" & Minute(Now) & ":" & Second(Now)

    告诉 Web 服务器去 Web 服务器上运行 VB.NET Now() 函数。VB.NET Now() 函数返回 Web 服务器上的当前时间。它将 Now() 函数的值按小时、分钟和秒值分开返回。此函数的结果作为 <ASP: label> 控件的一部分返回,位于页面下方。我们将在第 3 章中介绍此控件。

    如果 Web 服务器和浏览器在不同的计算机上,那么 Web 服务器返回的时间可能与您正在使用的浏览机器上保存的时间不同。例如,如果此页面托管在洛杉矶的计算机上,那么您会期望页面显示洛杉矶的本地时间——即使您正在从开罗的计算机浏览该页面。

    这个例子不是非常交互或动态的,但它说明了我们可以要求 Web 服务器为我们执行一些操作,并在 HTML 页面的上下文中返回结果。当然,通过将此技术与 HTML 表单和其他工具结合使用,我们将能够构建一个更具信息量、更具交互性的用户界面。

    ASP.NET 故障排除

    如果您在上一个示例中遇到困难,那么您可能陷入了新 ASP.NET 程序员常遇到的一个简单陷阱,并且可以轻松纠正。在本节中,我们将探讨一些常见错误以及您的脚本可能无法运行的原因。如果您确实遇到了问题,也许本节将帮助您识别它们。

    找不到程序,或未显示 ASP.NET 的结果,或浏览器尝试下载文件

    如果您尝试像这样在本地硬盘驱动器上查看页面,您将遇到此问题。

    C:\BegASPNET\ch01\punctual.aspx

    如果您在 Windows 资源管理器中单击该文件,您也会遇到此问题。如果您安装了 Microsoft FrontPage 或 Visual Studio.NET,它将启动并尝试帮助您编辑代码。否则,您的浏览器可能会显示警告消息,或者最有可能的是,它会询问您希望使用哪个应用程序打开 ASPX 文件。

     

    旧版浏览器可能会尝试下载文件。

     

    问题

    这是因为您正在尝试以不触发从 Web 服务器请求 ASP.NET 页面的方式访问页面。因为您不是通过 Web 服务器请求页面,所以 ASP.NET 代码没有被处理——这就是为什么您没有得到预期的结果。

    要通过 Web 服务器调用网页并处理 ASP.NET 代码,您需要引用 URL 中的 Web 服务器。根据您是在本地网络上还是通过 Internet 浏览到服务器,URL 应类似于以下之一。

    https:///5040/ch01/punctual.aspx

    http://www.distantserver.com/5040/ch01/punctual.aspx

    无法显示页面:HTTP 错误 403

    如果您收到 403 错误消息,那可能是因为您没有权限执行页面中包含的 ASP.NET 代码——注意页面中间的“执行访问被禁止”错误。

    如您所忆,权限由包含 ASP.NET 页面的虚拟目录的属性控制。要更改这些属性,您需要启动 MMC 中的 IIS 管理单元,如本章前面所述。在左窗格中找到 BegASP.NET 虚拟目录,右键单击它,然后选择“属性”。这将打开本章前面遇到的 BegASP 属性对话框。

    在这里,您需要检查“执行权限”框中显示的值是“仅脚本”还是“脚本和可执行文件”——但绝对不是“无”。

    找不到页面:HTTP 错误 404

    如果您收到此错误消息,则意味着浏览器已成功连接到 Web 服务器,但 Web 服务器找不到您请求的页面。这可能是因为您在浏览器提示符处键入了错误的 URL。在这种情况下,我们将看到类似以下的错误消息。

    如果您看到此页面,则可能怀疑以下错误之一。

    • URL 中的简单拼写错误,例如。https:///5040/ch01/punctually.aspx
    • 错误的目录名,例如。https:///5040/punctual.aspx 而不是 https:///5040/ch01/punctual.aspx
    • 在文件名后包含目录分隔符(/),例如。https:///5040/ch01/punctual.aspx/
    • 在 URL 中使用目录路径,而不是使用别名,例如。http://chrisu//BegASPNET/ch01/punctual.aspx
    • 将页面另存为 .html 或 .htm,而不是 .aspx,例如。https:///5040/ch01/punctual.htm

    或者如上所述,您使用了物理目录的名称而不是虚拟目录的名称。

    https:///BegASPNET/ch01/punctual.aspx 

    当然,您可能输入了正确的 URL,但仍然遇到此错误。在这种情况下,最可能的原因是您使用记事本保存了文件,并且(保存文件时)它使用了默认的“另存为类型”设置,即“文本文档 (*.txt)”。这会自动将 .txt 后缀添加到文件名末尾。在这种情况下,您将不知不觉地得到一个名为 punctual.aspx.txt 的文件。

    要检查是否发生了这种情况,请进入 Windows 资源管理器,并查看包含该文件的(物理)文件夹。进入“工具”菜单,选择“文件夹选项……”。现在,在“查看”选项卡中,确保“隐藏已知文件类型的扩展名”未被选中,如下图所示。

    现在单击“确定”,然后返回 Windows 资源管理器查看您的文件。您可能会看到类似以下内容。
    以下内容

    正如您所见,记事本在与您打交道时不够诚实:当您以为自己已将文件另存为 punctual.aspx 时,它却很不方便地将其另存为 punctual.aspx.txt。毫不奇怪,如果您的 Web 服务器意外重命名了您的文件,它将无法找到。要更正文件名,请在上面的右窗格中右键单击它,从出现的下拉菜单中选择“重命名”,然后删除末尾的 .txt。

    网页不可用(离线时)

    偶尔,您会遇到以下消息框。

    发生这种情况是因为您尝试请求一个页面,但目前没有有效的 Internet 连接。这是浏览器的一种误判(除非您的 Web 服务器与您正在工作的计算机不是同一台机器)——它试图连接到 Internet 来获取您的页面,但没有意识到您请求的页面存在于您的本地计算机上。一种检索页面的方法是点击对话框中的“连接”按钮;但这并不是最令人满意的解决方案(因为您可能会产生通话费用)。或者,您需要调整浏览器的设置。在 IE5/IE6 中,选择“文件”菜单,然后取消选中“脱机工作”选项。

    如果您在网络上工作并使用代理服务器访问 Internet,也可能导致这种情况。在这种情况下,您需要绕过代理服务器或为该页面禁用它,如本章前面“浏览 Web 服务器上的页面”部分所述。或者,如果您使用调制解调器且不需要连接,则可以通过更改 IE 查找页面的方式来纠正此误判。为此,请选择“工具 | 连接”选项,然后选择“从不拨号连接”。

    我只得到一个空白页

    如果您在浏览器中看到一个空白页,那可能意味着您成功保存了 punctual.aspx 而没有输入任何代码,或者您忘记刷新浏览器了。

    页面显示消息但未显示时间

    如果网页显示消息“在 Web 服务器中,时间是精确的...”但未显示时间——那么您可能误输入了代码。例如,您可能误输入了控件的名称。

    time.text=Hour(Now) & ":" & Minute(Now) & ":" & Second(Now)

    <asp:label id="hour" runat="server" />

    控件“hour”的名称必须与 ASP.NET 代码行中的第一个单词匹配,否则控件将无法识别它。

    我收到一条引用服务器错误的错误声明

    如果您收到一条消息,指出无法显示页面,并引用了服务器错误,例如。

    那么这意味着 ASP.NET 代码本身存在错误。通常,错误消息会附带额外的信息。例如,如果您省略了代码中的闭合 </script> 标签,您将收到此错误消息。要仔细检查这是否不是这种情况,请使用 Wrox 网站 http://www.wrox.com 提供的 sample punctual.aspx。

    我有一个不同的问题

    如果您的问题未在此描述中涵盖,那么测试 ASP.NET 随 QuickStart 教程提供的某些示例页面(http://www.asp.net)是值得的。这些应该可以帮助您检查 IIS 是否已正确安装。如果需要,您可以卸载并重新安装,但在此之前,先重启服务器可能有所帮助。

    您可以在 http://p2p.wrox.com 获取支持,这是我们致力于解决本书支持问题的网站。或者,还有许多其他致力于 ASP 和 ASP.NET 的网站。实际上,您会发现很少有网站只专注于这两种技术中的一种。这里只列出几个。

    • http://www.asp.net
    • http://www.asptoday.com
    • http://www.asp101.com
    • http://asptracker.com
    • http://www.15seconds.com
    • http://www.4guysfromrolla.com

    这些页面上有大量的解决方案、讨论和技巧,还可以点击到其他相关页面。此外,您可以尝试 www.asp.net 上的新闻组,例如 aspngfreeforall。

    您现在应该已经成功下载、设置并安装了 IIS 和 ASP.NET,并且已经运行了您的第一个 ASP.NET 应用程序。如果您已经完成了所有这些,您可以为自己拍拍胸脯,泡杯茶,准备在下一章中学习 ASP.NET 的一些原理。

    摘要

    本章以对 ASP.NET 和动态网页的简要介绍开始,并探讨了您希望使用服务器端技术创建网页的一些原因。我们回顾了动态网页的一些历史,即其他技术的概述。对 ASP.NET 的这种非常简短的介绍将在下一章中扩展。

    然而,本章的大部分内容是关于安装过程的描述。您必须安装 IIS 5.0/5.1、MDAC 2.7 以及 ASP.NET 或 .NET Framework SDK,才能继续阅读本书,因此请不要被诱惑跳过可能未正常工作的部分。我们列出了许多资源,可以帮助您一切就绪,而且很少有别人没有遇到过的问题。

    下一章将介绍随 ASP.NET 一起安装的软件——.NET Framework,并将更详细地介绍 ASP.NET 的功能、.NET Framework 是什么以及两者如何协同工作。

    版权和署名声明

    本章由 Juan T Llibre、Ollie Cornes、Chris Goode、Chis Ullman 等人撰写,摘自 Wrox Press Limited 于 2001 年 8 月出版的《Beginning ASP.NET using VB.NET》;ISBN 1861005040;版权所有 © Wrox Press Limited 2000;保留所有权利。

    未经出版商事先书面许可,不得以任何形式或通过任何方式(电子、静电、机械、影印、录音或其他方式)复制、存储在检索系统中或传输本章的任何部分,但已纳入评论性文章或评论中的简短引述除外。

  • © . All rights reserved.