第一章
ASP.NET
介绍
当微软创建
.NET
,它不仅仅梦想未来――它还担忧当代
web
开发技术的困惑和限制。在你开始
ASP.NET3.5
以前,本书帮你回顾这些问题,你将明白
.NET
提供的解决方案。
本章你将通过
web
开发的历史开始认识
ASP.NET
,做一次旋风般的
.NET
重要特性之旅,并且预览
ASP.NET3.5
的核心变化。如果你是第一次接触
ASP.NET
,本章将使你加快速度。相反,如果你已有
.NET
开发经验,那么你有两个选择。首先你可以快速阅读本文。否则,你可以跳到“
ASP.NET3.5
:传说在延续”去预览
ASP.NET3.5
。
ASP.NET 3.5:
传说在延续
当微软发布
ASP.NET 1.0
时,甚至没有期望这项技术被多门狂热的采用。
ASP.NET
很快变成用微软技术开发
web
应用的标准,沉重打击了其他
web
开发平台的竞争者。从那时起,
ASP.NET
有了一个修正版(
ASP.NET1.1
)和两个更重要的版本(
ASP.NET2.0
和
ASP.NET3.5
)
ASP.NET3.5
第一次面对
ASP.NET3.5
的开发人员不免要问其与
ASP.NET3.0
的不同。说来也怪,
ASP.NET3.0
是不存在的。微软使用
.NET Framework 3.0
来发布新技术――最特别的,
WPF
(
Windows Communication Foundation
),一种用来创建面向消息服务的技术,
WF
(
Windows Workflow Foundation
),一种允许你将复杂业务处理模拟成一系列动作的技术。然而,
.NET Framework 3.0
不包括新版本的
CLR
或
ASP.NET
。相反,下一版的
ASP.NET
被集成到
.NET Framework 3.5
中。
LINQ
LINQ
(
Language Integrated Query
)是一套
C#
和
VB
语言的扩展。它使你用
C#
和
VB
操纵内存数据,几乎和操作数据库一样。
从技术上讲,
LINQ
定义了大约
40
个查询操作符,比如
select
、
from
、
in
、
where
和
orderby
等。这些操作符能使你编码查询。然而,数据有很多类别,对不同类型数据的查询有各自的
LINQ
形式。
最基本的
LINQ
形式是
LINQ to Objects
:可以用来从对象集合执行查询得到某些对象的细节。
LINQ to Objects
不是
ASP.NET
特有的。换句话说,你可以像在其他类型
.NET
应用一样在
web
页面中使用它。
接下来是
LINQ to DataSet
和
LINQ to XML
。前者它提供类似于访问内存中
DataSet
对象,后者操作
XML
数据。第三方开发人员和工具开发商肯定开发了更多
LINQ
供应器。不过,
LINQ
的形式最关注
LINQ to SQL
,使你用
LINQ
语句对
SQL Server
数据库执行查询。本质上,
LINQ to SQL
基于你的代码创建一个完全参数化
SQL
查询,在你访问查询结果时执行这些查询。你不需要写任何数据访问代码或使用传统的
ADO.NET
对象。
LINQ to Objects
、
LINQ to DataSet
和
LINQ to XML
是
ASP.NET
的补充特性,不与其以任何方式集成。不过,
ASP.NET
支持
LINQ to SQL
――一个数据源控件,可以通过
LINQ to SQL
执行查询,且将结果绑定到
web
控件,不需要额外代码。你可以在第
13
章学习到
LINQ to Objects
、
LINQ to DataSet
和
LINQ to SQL
,在第
14
章学习
LINQ to XML
。
ASP.NET AJAX
最近,
web
开发人员重新重视
web
应用的一些弱点。最明显的是在服务器端编程平台下响应缺乏的问题,比如
ASP.NET
。因为
ASP.NET
所有的工作都在
web
服务器上,每次页面动作发生,浏览器需要提交数据到服务器,得到新版页面,并且刷新显示。这个过程再快也会有明显的闪烁。并且这样这比较浪费时间,导致其不适合在频发事件中使用,比如鼠标移动和键盘敲击。
web
开发人员力图使用
JavaScript
,一种广泛应用的客户端脚本语言,来解决这些问题。在
ASP.NET
中,许多强大控件使用到了
JavaScript
,比如
Menu
控件,当用户移动鼠标到副标题时立刻能响应。当你使用
Menu
控件,你的页面不回传到服务器除非用户点击某一条目。
在传统
ASP.NET
页面,开发人员使用服务器控件比如
Menu
得到客户端脚本的好处。不过,计时高级控件,回发是不可避免的。比如,如果你需要更新页面的部分信息,在普通
ASP.NET
中唯一的方式就是发送页面到服务器得到全新的
HTML
文档。这个方法可行但是不尽如人意。
进取的
web
开发人员迎接挑战,应用更多的客户端代码和更高级的方式。其中最脍炙人口就是
Ajax
(
Asynchronous JavaScript and XML
)。
Ajax
是一种客户端技术编程捷径,用来请求服务器,在无需完全回发的条件下更新内容。一般来说,
Ajax
页使用客户端脚本代码在幕后发起异步请求。服务器接收请求,运行相关代码,返回页面所需数据(通常是
XML
标记块)。最后,客户端代码接收新数据,然后执行其他动作,比如刷新页面某部分。尽管
Ajax
概念上非常简单,但是它能让你的页面运行起来更流畅、更连续。以下通过图示说明普通页面方式和
Ajax
方式的不同。
Ajax
和类似的客户端脚本技术并不新颖,但近年来它们在
web
开发中开始发挥越来越重要的作用。原因之一是
XMLHttpRequest
对象――支持异步客户请求的对象――在当前浏览器中被广泛支持,比如:
l
Internet Explorer 5
或更高版本
l
Netscape 7
或更高版本
l
Opera 7.6
或更高版本
l
Safari1.2
或更高版本
l
Firefox1.0
或更高版本
不过,用这种方式写客户端脚本确实比较巧妙。你将在第
31
章学习到
ASP.NET
回调来做这些事情。不过,
ASP.NET
也包括一些更强大组成部分叫做
ASP.NET AJAX
,用来扩展
ASP.NET
的应用。
绿点和红点
很奇怪,
ASP.NET3.5
并不是完全新版
ASP.NET
。相反,
ASP.NET3.5
是基于
.NET2.0
上添加一些特性来设计的。再
.NET3.5
中不变的部分通常叫做红点,变的部分叫做绿点。
红点包括
CLR
,
ASP.NET
引擎和所有
.NET2.0
类库。换句话说,如果你创建新的
ASP.NET3.5
应用,运行环境和
ASP.NET2.0
一样。另外,你在
.NET2.0
中的使用的所有类――包括连接数据库、读写文件、
web
控件等等――在
.NET3.5
继续保留。红点也包括
.NET3.0
的特性,比如
WCF
。
所有
.NET3.5
中的程序集保留它们原始版本号。即
.NET3.5
包括
2.0,3.0
和
3.5
的混合版。
ASP.NET3.5
绿点包括一部分新类型。对于
ASP.NET
开发人员,重要的新程序集包括:
l
System.Core.dll
:包括
LINQ
核心功能
l
System.Data.Linq.dll
:包括
LINQ to SQL
的实现
l
System.Data.DataSetExtensions.dll
:包括
LINQ to DataSet
的实现
l
System.Xml.Linq.dll
:包括
LINQ to XML
的实现
l
System.Web.Extensions.dll
:包括
ASP.NET AJAX
和新
web
控件的实现。
创建
ASP.NET3.5
应用,你可以使用
C#3.0
语言编译器。它包括支持一些新特性,大多数需要
LINQ
支持。下图展示了
ASP.NET3.5
类和组件
理解
ASP.NET3.5
的多层架构非常重要,因为你仍然能看到某些旧版本的痕迹。比如,
ASP.NET
将临时文件和
web
服务器配置文件放到
c:\Windows\Microsoft.NET\Framework\v2.0.50727
。因为
ASP.NET3.5
使用
ASP.NET2.0
引擎,而
ASP.NET2.0
最终版就是
v2.0.50727
Silverlight
最近,有许多
Silverlight
新动向。这是一项微软新技术,允许各种操作系统上的各种浏览器运行真正的
.NET
代码。
Silverlight
通过一个浏览器插件运行,提供
.NET
Framework
类库的一个子集,包括
WPF
的简化版(
WPF
用来开发下一代
windows
用户界面)。
那么,
Silverlight
如何适应
ASP.NET
世界的?
Silverlight
是全部面向客户端代码的,可以用来创建丰富页面,而不仅仅是
HTML
、
DHTML
和
JavaScript
。从某种意义上讲,
Silverlight
模仿了
Adobe Flash
的特性和目标。通过在
web
页面中使用
Silverlight
,可以画出强大的
2D
图形、演示场景或播放视频和其他媒体文件。
Silverlight
特别适合创建小脚本,就像浏览器游戏一样。(略)
从很多方面上说,
Silverlight
是
ASP.NET
的补充技术。
ASP.NET3.5
不包括基于
Silverlight
的任何特性,但是未来的
ASP.NET
版本会做到。比如,未来的
ASP.NET
版本可能包括服务器控件用来发送
Silverlight
内容。(略)
翻译是个苦活啊,未完待续……