RSS 2.0 Feed

Tuesday, July 15, 2008

【原文地址】ASP.NET MVC Preview 4 Release (Part 1)
【原文发表日期】 Monday, July 14, 2008 2:18 AM

ASP.NET MVC开发团队正处于完成崭新的“第四个预览版”的最后阶段,他们希望在本周稍后发布这个版本。第三个预览版着重于完善ASP.NET MVC中的许多底层的核心API和扩展点。从本周的第四个预览版开始,你将看到越来越多的建立于这些核心基础之上的,增加生产力的高层特性开始出现。

这个新的版本里有一堆新特性和功能,实际上其数目之多,我决定我需要2个帖子才能对它们全部论及,这第一个贴子将讨论第四个预览版中的缓存(Caching),错误处理(Error Handling)和安全(Security)新特性,以及一些测试方面的改进,我下一个贴子将讨论这个版本中新加的AJAX特性。

理解过滤拦截器(Filter Interceptors)

Action过滤器属性(Filter Attributes)是ASP.NET MVC中一个非常有用的扩展功能,这个东西最初是在第二个预览版中加入的,允许你在对MVC控制器的请求中注入拦截代码,在 Controller和它的Action方法执行的前后执行,这可以促成一些非常棒的封装场景,在其中,你能以一种非常干净的,声明的方式轻松地封装和重用功能。

下面是一个极其简单的例子,ScottGuLog过滤器,我可以用它来记录在请求的执行过程中抛出的异常的细节。实现一个定制的过滤器类非常容易,只要继承自ActionFilterAttribute类型,覆盖其中的适当方法,在Controller的Action方法调用之前或之后,或者在ActionResult处理进回复之前或之后运行代码。

在ASP.NET MVC Controller中使用过滤器也是非常容易的,只要在Action方法上将其声明为一个属性,或者在Controller类本身之上声明即可(在这个情形下,它将运用于Controller中所有的Action方法):

在上面,你可以看到应用了的2个过滤器的例子,我表示要将“ScottGuLog”运用于“About”这个Action方法,而将“HandleError”过滤器运用于HomeController的所有Action方法之上。

ASP.NET MVC的以前几个预览版本早就开启了这个过滤器扩展性,但并没有发布预制的过滤器,这第四个版本包含了几个有用的过滤器,可以用来处理输出缓存,错误处理以及安全的场景。

OutputCache过滤器

[OutputCache]过滤器提供了一个简易的方式,将ASP.NET MVC与ASP.NET的输出缓存功能相结合(在ASP.NET MVC第三个预览版中,你要编写代码才能实现这个功能)。

想试验一下的话,修改HomeController(是由VS ASP.NET MVC项目模板生成的)中的Index Action方法的Message值来显示当前时间:

在运行这个应用时,每次刷新页面,你都会看到时间戳更新:

我们可以在我们的Action方法上加[OutputCache]属性来给这个URL启用输出缓存,我们将使用下面的声明来配置缓存回复10秒钟:

现在,当你点击刷新时,你会看到时间戳每10秒钟才更新一次。这是因为action方法每10秒钟才会被调用一次,其他时间的所有请求都是从ASP.NET输出缓存中供应的(意味着不用运行什么代码,所以请求的回复超快)。

除了支持时间间隔外,OutputCache属性还支持标准的 ASP.NET 输出缓存变化选项(随参数,头内容,内容编码以及定制逻辑而变化)。例如,下面的例子会根据PageIndex查询字符串参数的值保存不同的页面缓存版本,然后会根据进来的URL的查询字符串值自动显示正确的版本:

你还可以结合ASP.NET的数据库缓存失效功能,该功能允许你在URL依赖的数据库被修改后自动导致缓存失效(小技巧:实现这个功能的最佳方案是在你的web.config中配置一个CacheProfile节,然后在OutputCache属性中配置指向该节点)。

HandleError过滤器

[HandleError]过滤器提供了一种声明的方式,来在一个Controller或一个Action方法上表示,如果在处理一个ASP.NET MVC请求中发生错误的话,应该显示一个友好的错误回复。

要试验一下的话,在项目中加一个新的TestController,实现一个action方法,在其中象下面这样抛出一个异常:

在默认情形下,如果将浏览器指向这个URL的话,它会给远程用户显示一个默认的ASP.NET错误网页(除非你去web.config文件中配置了<customErrors>节):

我们可以在我们的Controller类或其中的Action方法上加一个[HandleError]属性,来改变要显示的HTML错误,而显示对终端用户比较友好的信息:

HandleError过滤器会捕捉住所有的异常(包括处理视图模板时抛出的错误),在出错时显示一个定制的Error视图回复。在默认情形下,它试图在你的项目中寻找一个名为“Error”的视图模板来生成回复。你可以将“Error”视图置于同个Controller相应的视图的目录之中(例如,上面的TestController的\Views\Test目录),也可以置于\Views\Shared文件夹中(系统会先找一个特定于控制器的出错视图,如果没找到的话,会在Shared文件夹中寻找,该文件夹包含了为所有控制器所共享的视图)。

从第四个预览版开始,在你创建新的ASP.NET MVC项目时,Visual Studio现在会自动为你在\Views\Shared文件夹中加一个默认的“Error”视图模板:

在我们的TestController类上加[HandleError]属性后,在默认情形下,它会给远程用户显示一个象下面这样的HTML错误页面(注意,它使用了项目的母板页,这样就将错误信息集成进了站点之中)。很明显地,你可以去定制这个Error视图模板,显示你想要的任何HTML或者更加友好的错误信息,下面只不过是随该版本而来的原装的信息:

为帮助开发人员,在本地浏览应用时,Visual Studio中由新的项目模板提供的默认的Error视图模板还会显示额外的错误堆栈跟踪信息:

你可以在Error视图模板中将代码删除来将其关闭,或者也可以在你的web.config文件中将<customErrors>设成“Off”。

在默认情形下,[HandleError]过滤器将捕捉和处理请求中抛出的所有异常。你也可以在[HandleError]属性上指定 "ExceptionType"和"View"属性来指定你感兴趣的特定异常类型,以及指定定制的错误视图:

在上面的代码中,我选择为SqlException和NullReferenceException异常显示定制的错误视图,所有其它的异常则将使用默认的“Error”视图模板。

Authorize过滤器

[Authorize]过滤器提供了一种声明的方式来控制对Controller或Action方法的访问权限,它允许你表示用户必须已经登录,或者要求他们必须是某个特定的用户或是某个特定的安全角色才能访问。这个过滤器可以用于任何类型的认证方式(包括基于Windows以及Forms的认证),还提供了自动将匿名用户转向到登录页面的支持。

要试验一下的话,在Visual Studio中给默认生成的HomeController中的“About” action方法加一个[Authorize]过滤器:

象上面这样声明[Authorize]属性表示用户必须已经登录进网站才能请求“About” action。如果还没登录的用户试图访问/Home/About URL的话,他们会无法访问该页。如果web应用是配置成使用基于Windows的认证的话,ASP.NET会自动使用他们的Windows登录身份来认证用户,如果成功的话,就会允许他们访问。如果web应用是配置成使用基于Forms的认证的话,[Authorize]会自动地将用户转向到登录页面以作认证(之后他们就能访问了):

[Authorize]属性也允许你将访问权限只授予特定的用户或角色。例如,如果我要将"About" action的访问权限只限于我自己和Bill Gates的话,我可以这么写:

一般来说,除了无关紧要的应用外,你不该在代码中硬写用户名字,一般地,你应该使用象“角色”这样的比较高层次的概念来定义权限,然后另外将用户映射到角色上(例如,使用活动目录或数据库来储存这些映射)。[Authorize]属性通过使用“Roles”属性,极大地方便了对Controllers和Actions的访问的控制:

[Authorize]属性并不依赖于任何特定的用户身份或角色管理机制,它只用ASP.NET的"User"对象,该对象是可扩展的,允许使用任何身份系统。

AccountController类

我在上面提到了[Authorize]属性可用于任何认证或用户身份管理系统,你可以编写或使用你想要的任何定制的登录UI或用户/密码管理系统。

但为助你起步,Visual Studio中的ASP.NET MVC项目模板现在包含了一个预制的“AccountController”类以及相关的登录视图,它们实现了表单认证成员系统,支持登录,退出,注册新用户,改变密码等。所有的视图模板和UI都可以轻松地定制,是独立于 AccountController 类或实现的:

Site.master模板在右上角也包括了UI,提供登录/退出功能,在使用基于表单的认证时,如果你目前还没认证的话,它会提示你登录:

在你通过认证后,它会显示一个欢迎信息,以及一个退出链接:

点击上面的Login链接,会将用户转到象下面这样的登录屏幕来做认证:

新用户可以点击注册链接来创建新的帐号:

错误处理和错误信息显示也是内置的:

加到新项目中的AccountController类使用了内置的ASP.NET Membership API来存储和管理用户凭证(Membership系统使用了提供器API,允许接入任何后台存储,ASP.NET包含了内置的Active Directory 和 SQL Server提供器)。如果你不想使用内置的Membership系统的话,你可以保留同样的AccountController action方法签名,视图模板,Forms认证ticket逻辑,只要替换掉AccountController类中的用户帐号逻辑就可以了。在下一个ASP.NET MVC预览版中,我们计划将AccountController和用户身份系统间的交互逻辑封装成一个接口,这将进一步方便你接入你自己的用户存储系统(而不必实现一个完整的membership提供器),以及方便你对它和AccountController进行单元测试。

我们的希望是,这给大家提供了一个很好的快速起步的方式,允许大家在创建一个新项目后,就有一个工作的end to end的安全系统。

测试TempData

在这第四个预览版的第一个贴子里要提到的最后一个改进是对Controller类所做的一些改进,这些改进将允许你更轻松地单元测试TempData集合,TempData 属性允许你保存你要持久到将来一个用户请求的数据,它的意义在于,只持续到下一个请求为止(之后就被去除了)。一般用于这样的MVC场景: 你想要进行一个客户端的重新定向来改变浏览器中的URL,然后想要一种简便的方式来保存临时的数据。

在以前的ASP.NET MVC预览版中,你需要mock对象才能测试TempData集合。在第四个预览版中,你不再需要mock或设置什么了,你现在可以在单元测试中,直接在Controller的TempData集合中添加和核实对象(例如,在调用控制器的一个action方法之前填充它的TempData属性,或者在action方法返回后核实action方法更新了TempData)。TempData集合的实际存储机制现在封装在单独的TempDataProvider属性中了。

结论

希望上面的贴子内容对即将发布的ASP.NET MVC的第四个预览版中的若干新特性和变动提供了一个简单的介绍,下一个贴子将讨论新加的 AJAX 功能,并且示范如何利用它。

希望本文对你有所帮助,

Scott

posted @ | Feedback (0) | Filed Under [ ASP.NET .NET Visual Studio MVC ]

Monday, June 09, 2008

【原文地址】Silverlight 2 Beta2 Released
【原文发表日期】 Friday, June 06, 2008 7:50 PM

Silverlight 2 Beta2版今天发布了,你可以在这里下载Silverlight 2 Beta2以及Visual Studio和Expression Blend工具支持。

Beta2加了许许多多的新功能(下面有更多细节),但下载大小仍只有4.6MB大,在机器上安装所花时间少于10秒,不用安装.NET框架或其他任何软件就可以工作,所有的功能在Mac和Windows机器上都能跨浏览器工作,这些功能在Linux上将由Moonlight 2提供。

Silverlight 2 Beta2支持一个go-live许可,它允许你开始使用和部署Silverlight 2于商业应用中。在Beta2与最终版间,会有一些API变动,所以你应该预期你用Beta2编写的应用在最终版出来时需要做些更新。但我们认为这些变动将是直截了当和比较容易的,你现在可以开始计划和着手开发商业项目了。

你可以使用Silverlight之VS 2008工具和Expression Blend 2.5六月份预览版来开发Silverlight Beta2应用,你可以在这里下载这2个工具,Silverlight之VS 2008工具在VS 2008和最近发布的VS 2008 SP1 beta下都工作。

UI以及控件方面的改进

Silverlight 2 Beta2 包括了在UI和控件方面的一大堆工作:

更多的内置控件

Beta 1的核心Silverlight安装只包含了几个控件,最常用的控件(包括Button, ListBox, Slider等)都是在另外的程序集中发布的,你需要在应用中将这些程序集捆绑发布(其结果是增加了应用的下载大小)。 作为核心Silverlight 2下载的一部分,Beta 2 现在将安装30多个最常用的控件,这意味着你现在可以开发使用这些核心控件的Silverlight 2应用,其下载大小可以只有3kb那么大,- 使得Silverlight应用的下载大小很小,并使得应用启动极快。

除了包含在基本Silverlight 2安装中的核心控件外,这个星期我们还将发布在另外的程序集中实现的其他高层次的控件,你可以在应用中引用和包含它们。这包括象DataGrid(其Beta2的新特性见下面),日历(Beta2中有多日选择和不可选日期的支持),以及TabPanel(Beta2中才出现的新控件)这样的控件。

我们最终预计会发布100多个Silverlight控件。

控件模板编辑支持

WPF和Silverlight编程模型最强大的一个功能是其完全定制控件的观感的能力,这允许开发人员和设计师以微妙和戏剧性的方式对控件的UI进行精雕细琢,促成巨大的灵活性。我曾在这里的Silverlight控件模板博客贴子里对这些概念讨论过。

这个星期的Expression Blend 2.5六月份预览版现在对控件模板编辑加了设计器支持,将方便你快速地改变任何控件的外观,而不必再屈尊去修改XAML源码。

要看控件模板编辑的实战例子的话,在Expression Blend设计表面上拖放2个Slider控件:

我们也许会判定默认的Slider控件模板的滑块对我们的应用来说太大,太宽了。要用控件模板编辑功能来改变它的话,我们可以在设计器上右击其中一个slider,选择“编辑控件部件”上下文菜单项。我们可以给我们的Slider选择创建一个空白的控件模板(从头做起),也可以编辑内置控件模板的拷贝(然后对之细调):

在我们选择编辑现有的控件模板的拷贝之后,Blend会提示我们创建并命名一个可重用的样式资源,我们将在其中定义我们的控件模板。命名完之后,我们可以选择将样式保存在应用级(在App.xaml中)或在当前页面/用户控件中:

在点击OK之后,我们会发现转到了Slider控件的模板编辑模式之下,我们可以改变,细调,添加/去除Slider控件模板中的任何底层元素。注意下面,在模板编辑模式中,我们可以看到和选择组成Slider控件模板的任何底层元素(这些元素在下面的“Objects”窗口中用红笔圈了出来)。

想把滑块做得窄一点的话,我们可以选择控件模板中的“HorizontalThumb”元素,调整它的宽度(在界面里或通过属性网格):

然后,我们可以使用设计器顶部的breadcrumb导航条回到我们的页面,看控件模板的变动实施后的效果:

注意,目前只有一个Slider控件使用了刚定义的控件模板的新样式资源。

要把同样的样式资源用到另外一个Silder控件上,我们可以选择该控件,右击,然后使用“Apply Resource(应用资源)”上下文菜单,把“ScottSlider”样式用到该控件上:

之后,2个Slider将引用同个样式:

以后对“ScottSlider”样式做的任何改变将会自动应用到这2个控件之上。

注意,在Silverlight 2中发布的所有控件都支持控件模板,在Expression Blend中都支持上面那样的编辑体验。

Visual State Manager (VSM-视觉状态管理器) 之支持

Silverlight 和 WPF中的控件模板支持对控件的“look(外观)”,以及控件的“feel(感觉)”的定制。“feel”之谓,我指的是改变它交互的响应性。例如,在按下时,得到焦点时,失去焦点时,处于按下的状态时,处于不可用(disabled)状态时,内中有东西被选中时。。。,它是如何反应的。经常地,在用户象这样与控件做交互时,你要执行动画效果。

我们在Silverlight 2 Beta2中引进的一个新东西是"Visual State Manager(视觉状态管理器)" (VSM),该功能将极大地方便你建造交互性的控件模板。VSM引入了你可在控件模板中利用的2个基本概念:"视觉状态(Visual States)" 和 "状态迁移(State Transitions)"。例如,象按钮这样的控件为自己定义了多个视觉状态: "Normal(正常)", "MouseOver(鼠标之下)", "Pressed(按下)", "Disabled(不可用)", "Focused(获取焦点)", "Unfocused(不具焦点)"。在Blend中的模板编辑模式下,设计师现在可以轻松地编辑按钮在每个特定状态下的外观,以及设置迁移规则来控制从一个状态迁移到另一个状态时动画效果应该运行的时间。然后在运行时,Silverlight会动态地运行合适的动画故事板来把控件从一个状态平滑地过渡到另一个状态。

这个模型很棒的地方是,设计师用编写代码,用手工创建动画故事板,也用理解控件的对象模型就可以非常有效率。这使得学习创建交互性控件模板的曲线非常容易,意味着现有的美工可以轻松地参与Silverlight项目。今年稍后,我们还将往WPF中添加"Visual State Manager(视觉状态管理器)" (VSM)的支持,让你在Windows应用中使用同样的方法,以及在 WPF 和 Silverlight 项目间共享控件模板。

要看这个的实战例子,让我们往设计表面上加一个Button控件:

然后,我们可以右击按钮控件,编辑它的控件模板。我们将不从现有的默认控件模板开始(就象上面的Slider例子一样),让我们创建一个空白的控件模板,从头做起:

Blend会提示我们给要创建的样式(Style)资源取一个名字,我们将它取名为“ScottButton”,点击OK。这会把设计器置于按钮的控件编辑模式下,一开始只有一个空白的控件模板:

上面有一样需要注意的东西是,在Blend中有一个新的“States(状态)”窗口,这个窗口会显示Button控件提供的所有的“Visual States(视觉状态)”。在上面,当前被选中的是“Base(基底)”状态,该状态允许我们定义我们的按钮控件模板常用的视觉树。

然后,我们可以往我们的基底状态中加一些矢量元素,来定义象下面这样的定制按钮的外观。我们可以使用由Blend提供的内置矢量绘制工具支持来设计这些图形,或者使用Expression Design 或 Adobe Illustrator来建造矢量图形,然后将其导入Blend中。下面,我们在我们的控件模板中加了4个“Path”元素,一个是带圆角的背景(其名为“background”),另一个带阴影(drop shadow)(其名为“shadow”),还有一个是带40%蔽光性的“shine”(在顶部加了一些晕光),再有一个定义了默认的内部内容(在这个情形下,是个房子的图案):

注:我们也可以导入一个图片,但使用矢量元素会给予我们以后对按钮进行扩缩/转换,在任意分辨率或尺度上保持清晰观感的灵活性(特别是在Silverlight移动设备的场景下,屏幕的分辨率大不相同或较小时,尤其有用),还允许我们对美工设计中的任何矢量元素可以轻易地做动画效果或改动。

完成设计上面的基底状态之后,我们可以按F5在浏览器中运行应用:

你可以在上面看到,我们的按钮控件现在拥有一个比较好看的外观。尽管它有了一个新的外观,但按钮依然象以前那样触发同样的焦点,点击,和悬浮事件,所以,使用按钮的开发人员在操作使用了我们的新控件模板的按钮时,不用改动任何代码

但我们的新按钮控件模板的一个缺点是,它并不是交互的。这意味着,如果按钮获得/失去焦点,或者鼠标悬浮其上时,我得不到任何视觉反馈。点击时,我也得不到很好的按下/弹起的动画效果。

要将交互性加到我们的按钮上,我们将回到Blend中,再次操作我们按钮的控件模板。之前我们把矢量图形元素加到了我们按钮的“Base(基底)”状态中,这允许我们定义所有视觉状态的默认视觉外观。我们现在将回去,进一步定制个别的按钮视觉状态。

例如,为实现按钮的mouse-over行为,我们可以在“States”窗口中选择“MouseOver”状态,然后细调按钮处于该状态时的外观。在下面,我选了控件模板中的“shine”矢量元素,调整它在属性网格中的Opacity属性,使其在MouseOver状态下可见度更高。注意Blend是如何在对象窗口中,自动使用红点加亮“shine”元素,然后在该元素的下面列出了Opacity属性的。这可以便利很快地跟踪我们在控件模板中在“Base(基底)”状态和“MouseOver”状态间所做的所有变动:

然后,我们可以在“States”窗口中选择“Pressed”状态,定制按钮处于按下状态时的外观。我们将改变“Base(基底)”状态的2样东西,第一个变动是使得“shine”元素可见(就象MouseOver状态一样),第二个变动是稍微偏移按钮控件的内容,同时保持影子元素不动。这会给予按钮一个很好看的“depressed(按下)”外观,与它的基底视觉形成很好的反差:

我们可以这样来实现偏移变动: 在设计器中选择background,content和shine元素,然后在属性浏览器中对它们施加一个偏移显示转换(offset render transform):

现在,在浏览器中再次运行我们的应用的话,我们会发现我们的按钮在使用时有交互的视觉反馈了。下面是我们按钮的“Normal(正常)”外观:

将鼠标悬浮于按钮之上,会造成象下面这样的发光效果:

点击按钮会导致它按下去,隐藏影子(在松开鼠标按钮时,它会弹回来):

注意,我们用编写任何代码或XAML来改变我们按钮的观感,新的视觉状态管理器功能会自动地为我们处理视觉状态间的过渡。

在默认情形下,在你从一个视觉状态移动到另一个视觉状态时,Silverlight会动态地为你构建和运行过渡Storyboard(提供了2个状态间的平滑过渡动画效果),你需编写任何代码就可以让这一切发生(注:如果你想的话,你还是能降低层次(drop down),加一个定制的Storyboard过渡,但在大多数情形下,你大概可以使用自动的Storyboard过渡)。

Silverlight的自动过渡功能中你可以利用的一个特性是,定制视觉状态过渡发生所花的时间,你可以这么做,点击视觉状态右边的箭头,设置一个规则来控制当从一个特定状态移到另一个状态时,过渡动画效果应该运行的时间。

例如,我们可以加如下的规则来表示,我们要它花0.2秒钟的时间来从"Normal"过渡到"MouseOver"视觉状态:

然后,我们可以象这样来配置这个规则,在Normal->MouseOver间过渡时花0.2秒钟:

然后,我们可以点击"MouseOver"状态,设置一个规则,导致从MouseOver->Normal的过渡花0.4秒钟:

现在,当我们重新运行应用时,对MouseOver场景,我们将有一个慢了一点的动画过渡,给我们的应用添加了一种稍微更加平滑和更为精致的感觉。我们不用编写一行代码就可以促成这个效果。 随Silverlight 2发布的所有控件都有对象上面这样的控件模板和视觉状态管理器之定制的内置支持。

想进一步了解新的视觉状态管理器和控件模板编辑功能的话,请看一下 这里这里的教程, 以及这里, 这里这里的相关录像。

TextBox

Beta2包括了对内置的TextBox编辑控件的一些非常重大的改进,现在支持带换行的文本卷动,多行文字选择,文档导航键,以及从剪贴板的拷贝/粘贴等。

Beta2现在还包含了对非西方字符集的IME Level 3输入支持(包括候选窗口选择):

输入支持

Beta2添加了全屏模式下额外的键盘支持(箭头键,tab,回车,home,end,上一页/下一页,空格键)。注:为避免密码欺骗场景,目前尚不允许完整的键盘输入支持。

Beta2还加了新的APIs支持墨印和笔触输入。

UI自动化和可访问性(Accessibility)

Beta2在Silverlight中添加了UI自动化框架支持,UI自动化(简称为UIA)允许屏幕阅读器和其他辅助性工具识别组成你的Silverlight 2应用的组件并与之进行交互。

Beta2使用了UIA框架,对一套Silverlight控件加了基于UIA的行为。在Silverlight 2的最终版本中,所有的控件都将内置拥有基于UIA的行为。我们还将支持高对比度的场景。这些功能将允许你建造可访问的,兼容section 508的应用。这个UIA支持还将促成对应用的自动化UI测试。

动画和图形系统

Beta2加了对自定义依赖属性的动画支持,现在也支持对象动画支持(对结构体的动画效果)。Beta2还支持在代码中创建Storyboard来对部分显示树执行动画效果,而不用将Storyboard加到显示树中(允许你将动画效果完全嵌在代码中),每帧动画的回调支持将加在最终版中。

Beta2包含了一个新的视觉树静态辅助类,提供了高级的视觉树检视APIs。它提供了象这样的功能: 枚举某个元素的子元素,获取某个给定参考元素的祖先/父元素。这些APIs可以操作你传人的任何UIElement对象。

DeepZoom

Beta2现在支持基于XML的DeepZoom集合的Manifest文件,Beta2还对DeepZoom加了可扩展的MultiScaleTileSource支持(允许开发人员连接到与Deep Zoom高性能显示所用格式不相符的的现有的金字塔结构的图片集合上)。

WPF兼容性

Silverlight Beta2包含了许多许多的缺陷修补/改动,以改进Silverlight和WPF间的API兼容性(注:Silverlight的最终版还将包含一些额外的兼容性工作)。我们还将在今夏把在 Silverlight 2中引进的一些新APIs加到.NET 3.5 SP1中的WPF中。

这个工作,加上我们今年稍后将加到WPF的VSM支持,将促成浏览器和桌面应用间很好的代码重用。

多媒体方面的改进

Silverlight 2 Beta2 包含了一些重大的媒体方面的工作:

自适应流媒体传输(Adaptive Streaming)

Beta2加了对“自适应流媒体传输(adaptive streaming)”的支持,它允许你以多种比特率编码媒体,然后由Silverlight应用根据网络和CPU条件动态地在它们中间切换。

这将促成极其丰富的终端用户媒体体验,因为它造成了这样的可能性,由内容提供商同时提供低端和高端比特率版本的录像,而由Silverlight根据终端用户的机器硬件和网络容量选择使用最佳的版本。假如在观看录像期间,机器或网络条件改变的话, Silverlight 可以自动地切换到更合适的比特率,而不用任何缓存或造成中断性故障。

Silverlight对自适应流媒体传输(Adaptive Streaming)的支持是可扩展的,允许任何人接入他们自己的逻辑来控制媒体内容的来源,应该使用什么比特率等。这意味着,任何CDN(内容发送网络)或媒体交付供应商可以轻松地与Silverlight集成,发送超高质量的录像。

内容保护

Beta2包含了DRM内容保护,支持Windows DRM和PlayReady DRM,两者都能跨浏览器和跨平台工作。

服务器端的播放列表

Beta2加了对服务器端播放列表的支持(以前的版本只支持客户端播放列表)。

Networking方面的改进

Silverlight 2 Beta2包含了一堆networking方面的工作:

跨域Sockets

Beta2现在允许跨域的HTTP和Sockets的networking支持(意味着你的应用可以调用不同于当前应用下载自的站点的网站)。

Silverlight会查看目标服务器上是否存在这样的XML策略文件,这文件表明了是否允许跨域网络访问。Silverlight支持一个我们开发的新XML策略文件格式,以及Flash策略文件(意味着可为Flash所用的现有的网站,不用费额外的功夫,就可在Silverlight中调用)。

后台线程Networking

Beta2现在允许Silverlight应用在后台线程上开始网络请求,以及在后台线程上处理网络回复。这将促成一大堆非常强有力的场景,允许你在做HTTP和Socket网络通讯时,避免阻塞浏览器的UI线程。

双向通讯(服务器推送)

Beta2支持与服务器上的WCF服务建立双向信道(duplex communication channels),这将促成一个非常干净的编程模型,允许服务器将消息“推送”到Silverlight客户端,而不用开发人员手工轮询服务器端的变动。这个编程模型在多种场景中都非常有用,包括即时消息/聊天应用,象股票行情和交易这样的监测/更新应用等。

Web服务

Beta2还显著改进了与基于SOAP的web服务间的互操作,Web服务代理类端点URL现在不用重新编译应用就可配置。Visual Studio现在还有一个新的“Silverlight-enabled WCF Service(启用了Silvelight的WCF服务)”项目模板,你可以将其加到ASP.NET web项目中,将服务发布到客户端。

REST和ADO.NET数据服务

Silverlight包括了对操作基于REST的web服务的支持。

Beta2加了对调用和消费ADO.NET Data Services(以前的代号为“Astoria”)的支持,ADO.NET Data Services将作为.NET 3.5 SP1的一部分发布,将便利在 ASP.NET web项目中发布可为任何使用REST URIs的客户端所消费的数据端点。 Silverlight Beta2 现在包括了 ADO.NET Data Service 客户端支持,这些支持允许你轻松地调用这些服务(还可以在Silverlight中使用LINQ表达式来表示这些服务的远程REST查询)。

JSON

Silverlight支持调用网上的基于JSON的服务。

Beta2现在还包括了LINQ to JSON支持,允许你在Silverlight应用中轻松地查询,过滤,并将JSON结果映射到.NET对象上,这方便了对已经发布在网上的现有的AJAX端点和服务的调用和操作。

数据方面的改进

Silverlight 2 Beta2 包括了数据方面的一堆工作:

DataGrid

Beta2给DataGrid控件加了若干个新功能,这些功能包括:

  • 行与列的高宽自动调整(Auto-sizing)支持
  • 按列排序(单列和多列排序支持)
  • 对终端用户重排纵列顺序(Column re-ordering)的支持(允许他们拖放纵列来重新安排顺序)
  • 固定列(Frozen column)的支持(允许你防止某个特定列的定制)
  • 性能和缺陷修补

数据绑定

Beta2加了更多核心的数据绑定功能以及更好的验证支持,这些包括:

  • 控件上每个绑定的Validation和BindingValidationError事件处理支持(允许你用TwoWay绑定来处理输入验证)
  • 对附加属性(attached properties)绑定表达式的支持
  • 更丰富的绑定值转换支持(包括值转换后备支持(fallback support))

隔离储存(Isolated Storage)

Silverlight允许应用将数据保存在客户端(通过我们称之为“Isolated Storage”的特性),应用可以提示用户授予它们改变该储存大小的权限(例如,一个用户也许会准许一个email程序50MB的本地存储)。

Beta2将提供给Silverlight应用的默认本地存储空间的大小增加到了1MB, Beta2现在还对管理每个网站的存储权限提供了更好的终端用户支持,以及轻松取消/删除应用的本地存储的能力。控制这些的管理UI现在可以由终端用户右击Silverlight应用,选择“Silverlight Configuration(配置)”菜单选项来调出来。

理解与Silverlight 1.0和Silverlight 2 Beta 1间的兼容性

Silverlight 2 Beta2与针对Silverlight 1.0的应用是兼容的。

Silverlight 2 Beta2 运行不了针对 Silverlight 2 Beta1 的应用, 因为,为了加入Silverlight 2的新功能,我们在两个beta版本间做了若干个API变动。安装了Silverlight 2 Beta1的浏览器在访问宿主了Silverlight Beta2应用的网站时,会提示升级到新的Silverlight beta版本。升级之后,不卸载Beta2的话,是无法再运行Beta1应用了。这意味着,如果你已经在网上发布了用Beta1开发的应用的话,你大概要尽快将其升级到Beta2。

我们在这里发表了一个文档,详细说明了Beta1和Beta2间的变动,可以帮助你理解这个情形。我还推荐你阅读 Shawn Wildermuth的《What Changed in Silverlight 2 Beta2(Silverlight 2 Beta2中的变动)》 和 《Upgrading your Silverlight 2 Projects to Beta2(将你的Silverlight 2应用升级到Beta2)》贴子,以了解Beta1和Beta2间的一些变动的更多细节。

结语

想了解 Silverlight 2的详细情况,下载Beta2的话,请访问http://www.silverlight.nethttp://expression.microsoft.com网站,我们会在不久的将来在这2个网站上发布文章,教程,录像以及其他信息,我也会在博客上发表一些我自己撰写的教程。

如果你还没读过的话,我建议你读一下几个月前Beta1发布时我写的《Silverlight 2初览》 和 《使用Expression Blend开发Silverlight 2应用 -- 初览 》贴子,它们对Silverlight编程模型和如何使用Visual Studio 2008和Expression Blend开发针对应用提供了很好的概述。

希望本文对你有所帮助,

Scott

posted @ | Feedback (1) | Filed Under [ ASP.NET .NET Visual Studio Community News Silverlight ]

Monday, June 02, 2008

【原文地址】ASP.NET MVC Support with Visual Web Developer 2008 Express
【原文发表日期】 Sunday, June 01, 2008 6:50 PM

上个星期,我在博客里宣布了ASP.NET MVC第三个预览版的发布,我忘了提及的一个重要事情是,你现在可以同时在Visual Studio 2008和免费的Visual Web Developer 2008 Express(VWD Express)中使用这个版本。

Visual Web Developer 2008 Express的SP1版添加了对类库项目和web application项目的支持(以前在其中只能使用web site项目)。这个新的支持本身非常有用,还促成了对ASP.NET MVC 和 Silverlight项目的支持。如果你安装了Visual Web Developer Express SP1 Beta版,你马上可以开始在其中使用ASP.NET MVC第三个预览版。

重要注意事项: ASP.NET MVC第三个预览版 并不 要求你安装SP1,如果你在使用Visual Studio 2008的话。ASP.NET MVC第三个预览版将同时在VS 2008和VS 2008 SP1下正常工作。

你可以在VS Web工具开发团队这里的博客中了解到有关VWD Express对ASP.NET MVC新支持的细节,该文还包含一个免费的web下载,它对ASP.NET MVC测试项目提供了基于NUnit单元测试的支持,你可以同时在Visual Studio 2008和Visual Web Developer Express 2008中使用这些NUnit项目模板。

希望本文对你有所帮助,

Scott

posted @ | Feedback (0) | Filed Under [ ASP.NET .NET Visual Studio MVC ]

Wednesday, May 28, 2008

【原文地址】ASP.NET MVC Preview 3 Release
【原文发表日期】 Tuesday, May 27, 2008 1:26 PM

今天早晨,我们发布了ASP.NET MVC框架的第三个预览版。上个月我曾在博客中详细讨论过包含了这个预览版中诸多变动的一个过渡性源码发布。今天的预览版还包含了不在上个月源码版中的一些另外的功能,一些改进/加工,以及Visual Studio工具集成和文档。

你可以在这里下载集成的ASP.NET MVC第三个预览版的安装包,你也可以在这里下载ASP.NET MVC框架第三个预览版的源码和框架单元测试。

Controller Action方法变动

ASP.NET MVC第三个预览版包含了曾在 四月份MVC源码发布贴子中讨论并预览过的MVC Controller变动,以及另外一些调整。

你可以继续编写返回void,其中封装了逻辑的控制器action方法,例如:

在运行时会显示下列HTML:

第三个预览版现在还支持使用返回一个“ActionResult”对象的方式,该返回对象表示了action方法的结果,允许结果的延迟执行。这可以极大地方便action方法的单元测试(而不必mock什么东西),它还允许更干净的组合以及总的执行控制流程。

例如,我们可以在我们的Browse action方法中使用LINQ to SQL,从数据库中取回一串Product对象,并且表示我们要显示它们的视图。下面的代码会将三个“ViewData”数据传递到视图中,“Title”和“CategoryName”字符串值,和一个强类型的产品集合(作为ViewData.Model对象而传递过去):

使用上述ActionResult方式的一个好处是,它极大地简化了对Controller action方法的单元测试(不用mock)。下面是一个核实上面的Browse action方法行为的单元测试:

 

然后我们可以在 \Views\Products 子目录中编写一个“Browse” 视图页面,使用由Browse action方法填充的ViewData数据来显示回复:

在访问 /Products/Browse/Beverages URL 时,我们就会得到一个类似下面这样的HTML回复(ViewData的三个用法用红笔圈了出来):

注意,除了支持“ViewResult”回复(表示应该显示一个视图)外,ASP.NET MVC的第三个预览版还添加了对返回“JsonResult”(适用于AJAX JSON序列化场景),“ContentResult”(适用于没有视图的流式内容),以及HttpRedirect 和 RedirectToAction/Route结果的支持。

总的ActionResult方式是可扩展的(允许你创建自己的结果类型),而且不久,你会看到我们添加多个内置的结果类型。

改进的HTML辅助方法

HTML辅助方法在ASP.NET MVC的第三个预览版中做了更新,除了一堆缺陷修补外,它们还包含若干个很好的可用性方面的改进。

自动的数值查询

在早先的预览版发布中,在调用HTML辅助方法时,你总是需要明确地传人要显示的数值。例如,要在<input type="text" value="some value"/>元素中包含一个数值,你需要写:

上面的代码会继续工作,虽然现在你还可以只写:

HTML辅助方法现在在默认情形下,会自动检查ViewData字典以及传人视图的任何Model对象,看是否有一个ProductName键或者同名属性值可用。

SelectList 和 MultiSelectList ViewModels

ASP.NET MVC的第三个预览版包含了新的 SelectList 和 MultiSelectList View-Model 类,这些类提供了一个比较干净的方式来填充HTML下拉框(dropdown)和可多选的列表框(listbox),以及管理象当前的选项这样的东西等等。 一个可更干净地处理表单场景的方法是,在一个控制器action方法中,生成并配置这些View-Model对象,然后将它们在ViewData字典中传到视图中去,来格式化和显示。

例如,在下面,我针对数据库中的独特分类对象的集合创建了一个SelectList view-model类,我表示我要使用“CategoryID”属性作为列表中每个条目的值,用“CategoryName”属性作为显示文字。我还把列表选项设置成我们正编辑的Product当前的CategoryId值:

然后在视图中,我们只要编写下面的代码来表示我们要就我们放入ViewData的SelectList创建一个下拉框:

然后,这会在运行时为我们显示一个下拉框,内含适当的条目和当前的选项:

 

内置的错误验证支持还没有包括在HTML辅助方法之中(你目前还需要为此编写代码),但会在将来出现,势将更进一步简化编辑场景。

你还会在将来的预览版本中看到ASP.NET AJAX辅助方法,用最少的代码,就可将AJAX轻松地集成进MVC应用中。

URL路径选择的改进

ASP.NET MVC第三个预览版包含了对URL路径选择系统的若干改进。URL路径选择是一个web MVC框架必须弄对的一个最“根本性(fundamental)”的组件,那就是我们在前几个预览版中花了很多精力来将其“钉死”的原因。我们的新URL路径选择引擎将于今夏在.NET 3.5 SP1中发布,将同时支持Web Forms 和 MVC请求。 在运行于.NET 3.5 SP1之上时,ASP.NET MVC将能够使用内置的.NET 3.5 SP1路径选择引擎。ASP.NET MVC也将包含一份相应的程序集,这样它在非SP1系统上也能工作。

第三个预览版中的URL路径选择包括下面一些改进:

MapRoute() 和 IgnoreRoute() 辅助方法

ASP.NET MVC 第三个预览版包括新的MapRoute和IgnoreRoute辅助方法,你可以使用这些方法更轻松地注册路径规则。MapRoute()提供了一个将新的MVC Route规则加到Routes集合中的简易方法,而IgnoreRoute()则提供了一个告诉URL路径选择系统中止处理某些URL模式(例如,ASP.NET中用来提供JavaScript和图像等的.axd资源处理器)的简易方法。

下面是在你创建一个新的ASP.NET MVC项目后,Global.asax中默认的RegisterRoutes()方法的例子,在其中,你可以同时看到这两个新的辅助方法的用法:

MapRoute()辅助方法是重载的,可以接受2个,或者3个,或者4个参数(路径名称,URL句法,URL默认参数,以及可选的URL参数的正则表达式约束)。

你可以调用MapRoute()任意次,来在系统中注册多个具名的路径。例如,除了默认的约定规则外,我们还可以象下面这样加一个名为“Products-Browse”的路径规则:

然后,我们就可以在我们的控制器和视图中,显式引用“Products-Browse”这个规则来生成针对该规则的URL。例如,我们可以使用Html.RouteLink视图辅助方法表示我们要链接到“Products-Browse”路径,在视图模板中使用象下面这样的代码传给它一个“Food”分类参数:

然后这个视图辅助方法就会访问路径选择系统,输出一个象下面这样的HTML超链接(注意它是如何使用路径规则将分类参数自动替换进URL的):

我们也可以在视图中使用新的Url.RouteUrl(routeName, values)方法,如果我们只想要获取一个具名路径的URL的话(而不是输出<a> html元素)。

我们也可以使用Controller基类上的新RedirectToRoute(routeName, values)辅助方法来根据具名的路径规则向浏览器发出重新定向。

更丰富的URL路径映射功能

ASP.NET MVC第三个预览版还支持一堆新的URL路径映射功能,你现在可以将"-", ".", ";"或者任何其他字符用作你的路径规则的一部分。

例如,将 "-" 用作分割字符,你现在可以使用象下面这样的规则,从你的URL中分别分析出语言和locale值:

在调用时,这会将适当的"language", "locale", 和"category"参数传给ProductsController.Browse action方法:

URL 路径规则 URL例子 传给Action方法的参数
{language}-{locale}/products/browse/{category} /en-us/products/browse/food language=en, locale=us, category=food
  /en-uk/products/browse/food language=en, locale=uk, category=food

或者你也可以在URL的后头使用"."文件扩展类型来决定是以XML还是HTML格式将结果发回:

这会在调用时将“category” 和 “format”参数同时传给ProductsController.Browse action方法:

URL路径规则 URL例子 传给Action方法的参数
products/browse/{category}.{format} /products/browse/food.xml category=food, format=xml
  /products/browse/food.html category=food, format=html

ASP.NET MVC的第三个预览版还支持通配符路径规则(在第二个预览版中就有了)。 例如,你可以在一个规则中表示要将所有剩下的URI内容作为一个具名参数传给一个action方法:

这会在调用时将“contentUrl”参数传给WikiController.DisplayPage action方法:

URL路径规则 Example URL例子 传给Action方法的参数
Wiki/Pages/{*contentUrl} /Wiki/Pages/People/Scott contentUrl="People/Scott"
  /Wiki/Pages/Countries/UK contentUrl="Countries/UK"

这些通配符路径在建造博客,维客或者其他基于内容的系统时会非常有用。

结语

今天发布的ASP.NET MVC的第三个预览版包括了一堆改进和加工。我们开始对URL路径选择和MVC的Controller/Action编程模型感到满意,感到那些方面“烧制”得非常好(bake really well)。在将来的预览版中,你将会开始看到编程模型stack上更多比较高层次的改进,象视图(html辅助方法,验证辅助方法等等),AJAX,子控制器和站点构成,更深入的登录,认证,授权和缓存集成,以及数据scaffolding支持等方面的东西。

我还将发表上个周末开始撰写的一个非常长的教程贴子,演示如何使用ASP.NET MVC的第三个预览版来建造应用,希望在最近几天内写完。这应该对ASP.NET MVC提供一个很好的介绍,以及对所有的东西是怎么协作的帮着提供一些上下文,如果你对使用ASP.NET MVC感兴趣的话。

希望本文对你有所帮助,

Scott

posted @ | Feedback (0) | Filed Under [ ASP.NET .NET Community News MVC ]

Friday, May 23, 2008

【原文地址】May 20th Links: ASP.NET, ASP.NET AJAX, .NET, Visual Studio, Silverlight, WPF
【原文发表日期】 Tuesday, May 20, 2008 10:02 PM

很抱歉,过去的几个星期贴子稀少,最近这里工作和生活都很忙。为活跃一下气氛,下面是我链接系列的新贴子。也请参阅我的ASP.NET 技巧,诀窍和教程网页Silverlight 教程网页中文版)里我以前写的众多很受欢迎的文章的链接。

ASP.NET

  • ASP.NET Perf Issue: Large numbers of application-restarts due to virus scanners: Tess Ferrandez的一篇精彩贴子,详细描述了一个确定为什么ASP.NET应用经常重启(导致性能下降)的调试过程。 其问题是在于一个病毒扫描器导致了文件不停地更新。一定要看一下你可以加到应用中的记录日志的代码,以识别类似这样的重启原因。

ASP.NET AJAX

.NET

  • 7 Ways to Simplify your code with LINQ: Igor Ostrovsky有一篇精彩的博客贴子,讨论了你可以用来改进你的代码的新代码技术,这些技术使用了.NET 3.5和其中的新的语言和LINQ特性。

  • Visual LINQ Query Builder for LINQ to SQL: Mitsu Furuta创建了一个很酷的Visual Studio设计器,允许你通过图形界面构造LINQ to SQL查询。也一定要去下载最新的LINQPad工具,它对学习和尝试LINQ查询绝对有用。

  • DataContracts without Attributes (POCO support): Aaron Skonnard有一篇很好的贴子,讨论了.NET 3.5 SP1中一个很好的可用性方面的变动,它允许你使用WCF的序列化器对POCO (plain old objects) 进行序列化。

  • Ukadc.Diagnostics: Josh Twist向我指出了一个他正开发的新CodePlex项目,该项目扩展了.NET中的System.Diagnostics功能,包括了更丰富的日志功能(SQL跟踪支持,email支持等)。

Visual Studio

Silverlight

  • Silverlight 2 Pie Chart: Peter McGrattan贴出了一个很好的控件和相应文章,示范如何使用他编写的一个新Silverlight图表控件。

WPF

  • WPF week on Channel9: 观看Channel9频道上的6个精彩录像,每个录像包含对WPF开发团队成员的采访以及示范,讨论包含进WPF 3.5 SP1中的一些精妙工作(阅读我 这里的博客贴子中对其中一些工作的摘要)。

  • WPF 3.5 SP1 StringFormat: Lester有一篇好贴,描述了如何使用WPF 3.5 SP1中新的StringFormat功能,这可以极大地方便处理数据绑定值的格式化。

希望本文对你有所帮助,

Scott

posted @ | Feedback (1) | Filed Under [ ASP.NET .NET Visual Studio LINQ Atlas WPF Silverlight Link Listing ]

Friday, May 16, 2008

【原文地址】Visual Studio 2008 and .NET Framework 3.5 Service Pack 1 Beta
【原文发表日期】 Monday, May 12, 2008 9:51 AM

今天早些时候,我们发布了.NET 3.5 SP1 和 VS 2008 SP1的公开beta版,这些服务更新提供了自11月份我们发布这些产品之后所报告的问题的缺陷修补以及性能改进的累积结果,内中还包含了若干新功能和功能增强,势将进一步完善.NET应用的建造(其中的一些细节请见下文)。

我们计划在今夏,作为免费更新,同时发布.NET 3.5 SP1 和 VS 2008 SP1的最终版本,你可以在这里下载和安装这些beta版。

SP1 Beta安装重要注意事项

今天发布的SP1 beta版还处于beta状态,所以你在重要的机器上安装时千万要慎重,下面是几个你需要知道的非常重要的SP1 Beta安装注意事项:

1) 如果你目前正运行Windows Vista的话,你应该确定在尝试安装 .NET 3.5 SP1 Beta之前安装了Vista SP1。如果运行 Vista RTM版本的话,安装.NET 3.5 SP1会有一些问题,这些问题将会在.NET 3.5 SP1的最终版中得到解决。到那之前,请确定在安装.NET 3.5 SP1 beta之前安装Vista SP1。

2) 如果你在你的机器上安装了VS 2008 Tools for Silverlight 2 Beta1安装包,你必须在安装VS 2008 SP1 Beta之前先卸载它,同时还必须卸载VS 2008的KB949325更新否则你的安装会失败。你可以在这里找到可以遵循的确切步骤的更多细节(注:你必须分开卸载这两样东西)。 在你机器上同时拥有Silverlight 2 运行时和.NET 3.5 SP1是没问题的,需要卸载的组件是VS 2008 Tools for Silverlight 2安装包。我们将在几个星期后发布可在VS 2008 SP1 beta下工作的VS 2008 Tools for Silverlight更新包。

3) .NET 3.5 SP1 beta版的一个行为变化会给Expression Blend的正式版造成问题。这个行为变化将会在.NET 3.5 SP1的最终版中恢复过来,到那时,Blend的所有版本运行起来都不会有问题。在那之前,你需要下载这最近更新过的Blend 2.5版本绕过这个问题。

Web开发之改进

.NET 3.5 SP1 和 VS 2008 SP1 内含一堆针对web应用开发的功能改进。

关于特定于VS方面的工作(包括具体的缺陷修补细节),VS Web Dev Tools开发团队在这里提供了细节。下面是web空间的一些工作的细节:

ASP.NET Data Scaffolding 支持 (ASP.NET 动态数据)

.NET 3.5 SP1添加了对一个丰富的ASP.NET 数据"scaffolding"框架的支持,该框架允许你很快地建造工作的数据驱动的web应用。使用ASP.NET 动态数据的功能,你可以自动地对各种数据对象模型(包括LINQ to SQL, LINQ to Entities, REST Services, 以及任何其他的ORM或者由动态数据提供器提供的对象模型)建造web UI(包含完整的CRUD,创建,读取,更新,删除的支持)。

SP1往ASP.NET中现有的 GridView, ListView, DetailsView 和 FormView控件中添加了这个新功能,提供了智慧的验证和灵活的数据模板选项,它还提供了智慧的新过滤性服务器控件,以及支持自动traverse主键/外键关系,显示友好的外键名称,所有这些都会给你省下成堆的代码。

你可以在Scott Hanselman这里的录像和教程中了解到关于该功能的有关细节。

ASP.NET 路径选择引擎(System.Web.Routing)

.NET 3.5 SP1包含了一个灵活的新URL路径选择引擎,它允许你把进来的URL映射到路径处理器上去。它包含了对从干净的URL(例如, /Products/Browse/Beverages)中分析出参数的支持,以及对从路径注册中动态计算和生成新的URL的支持。

这个新的路径选择引擎为ASP.NET动态数据,以及新的ASP.NET MVC框架所用,它将同时支持基于WebForms和MVC的请求。

ASP.NET AJAX 倒退/前进按钮历史支持

.NET 3.5 SP1 往 ASP.NET AJAX中加了新的API,允许你更好地控制浏览器的历史列表(允许你控制浏览器的倒退/前进按钮的行为)。

你可以在这里的文章,以及这里的screencast中了解有关这个功能的细节。

ASP.NET AJAX 脚本合成支持

.NET 3.5 SP1 在<asp:ScriptManager>服务器控件上引进了一个新的<CompositeScript>元素,它允许你用声明的方式在其中定义多个脚本引用。在CompositeScript元素中的所有脚本引用,会在服务器上合成起来,以单个脚本的行为提供给客户端,减少了对服务器的请求数目,改进了ASP.NET AJAX应用的页面装载时间。

这个脚本合成功能支持基于路径的脚本以及基于程序集资源的脚本,是使用ScriptResources.axd处理器动态地提供合成的脚本的。

Visual Studio 2008性能改进: HTML 设计器 和 HTML 源码编辑器

二月份时,我们发布了一个热补累积版,其中包含对VS 2008 Web设计器的若干性能改进和缺陷修补,VS 2008 SP1包括了所有这些修补,还提供了若干额外的性能改进。

Visual Studio 2008 JavaScript脚本格式化和代码设置

Visual Studio已经有好几个版本支持丰富的VB和C# 源代码格式化选项(间距,换行,大括号位置等等)。

VS 2008 SP1对 JavaScript(<script> 代码块和.js文件)也提供了丰富的源代码格式化支持,你现在可以使用工具->选择对话框来配置你的Javascript编程设置:

这些设置将会在你在源码编辑器中键入新的Javascript代码时自动采用,你也可以选择现有的代码,右击,选择“格式化选择部分”选项来对现有Javascript代码施用你的样式设置。你可以在 这里了解到有关这个新功能的细节。

Visual Studio 对多个 Javascript/AJAX 框架更好的Javascript Intellisense支持

VS 2008 在源码视图中包含了对Javascript Intellisense 的支持。 初始VS 2008版本的intellisense,很好地支持原生的JavaScript,以及使用ASP.NET AJAX JavaScript 类型模式编写的代码。 但JavaScript是门非常灵活的语言, 许多JavaScript库充分利用了这灵活性,来实现他们各自的功能,但有时候其实现方式妨碍了intellisense引擎提供代码完成的支持。

VS 2008 SP1对流行的JavaScript库添加了更棒的intellisense支持,特别地,我们花了功夫支持JQuery, Prototype, Scriptaculous, ExtJS, 以及其他流行的库。在你引用这些库时,你会得到默认的intellisense。 我们还在研究是否可以对一些比较流行的库维护另外的intellisense提示文件,你可以下载这些文件以得到更好的intellisense和文档支持。

下面是一个在VS 2008 SP1 JavaScript intellisense引擎中使用JQuery起始函数的例子:

注意下面VS 2008 SP1现在即使是在连串的JQuery选择器上也能提供方法参数完成:

Visual Studio对ASP.NET项目中WCF服务的重构支持

VS 2008 SP1对包含在ASP.NET Web Site 和 ASP.NET Web Application项目中的 WCF 服务添加了更好的重构支持。

假如你使用重构支持,对WCF服务重新命名类名,接口契约,或者命名空间,VS 2008 SP1现在将会自动地修正web.config和引用它的SVC文件。

Visual Studio对经典ASPIntellisense和调试的支持

Visual Studio的早期版本包括了对经典ASP(.asp)网页中intellisense和调试的支持,但VS没有创建经典的ASP网页/项目的文件和项目模板已经有几个版本了。在初始的VS 2008中,我们不正确地假设这意味着大家不在使用经典ASP的支持了,但我们在发布VS 2008之后听到了反馈说人们实际上还在使用。

在VS 2008 SP1中,对经典ASP intellisense和调试的支持又回来了:

 

Visual Web Developer Express 版对类库和Web Application项目的支持

免费的Visual Web Developer 2008 Express 版也在SP1中作了更新,加了对类库和ASP.NET Web Application项目类型的支持。Visual Web Developer Express版的早期版本只支持ASP.NET web-site项目。

此外,对类库和web应用项目的支持还将允许你在免费的Visual Web Developer 2008版中建造ASP.NET MVC和Silverlight项目。上面所有的JavaScript,动态数据,经典ASP, 以及 AJAX改进都将在Visual Web Developer Express版中工作。

对客户端开发的改进

.NET 3.5 SP1 和 VS 2008 SP1包含了针对客户端应用开发的重大的性能,部署,和功能改进。

Tim Sneath在这里有一篇精彩的博客贴子,讨论了其中一些客户端开发方面的改进,下面是相关的细节:

应用启动和Working Set性能改进

.NET 3.5 SP1 包括了对CLR的非常重大的性能改进,将导致极其快速的应用启动,特别是在“冷启动”的场景下(指目前没有任何.NET应用在运行)。这些得益大部是通过改变CLR NGEN文件中的块布局,以及通过极大地优化IO访问模式来取得的。我们还将对我们的JIT代码生成器做一些很好的优化,以允许使用结构体的方法的更好的行内化。

今天,在安装SP1后,对大型的.NET客户端应用的测量,我们发现启动的速度之提高几达百分之四十,这些优化在某些情形下还有将ASP.NET 应用每秒请求的吞吐量提高了至百分之十的副作用。

新的New .NET 框架客户端Profile安装包

.NET 3.5 SP1还给建造.NET客户端应用的开发人员引进了一个被称为“.NET Framework Client Profile”的新安装包选项,它提供了一个新的安装程序,能在还没有安装.NET框架的机器上提供更小,更快,和更简单的.NET客户端应用的安装体验。

.NET Framework Client Profile安装只包括了.NET框架中常用于客户端应用场景的那些程序集和文件。例如,它包括了Windows Forms, WPF, 和 WCF,并不包括ASP.NET和那些主要用于服务器场景的那些库和组件。我们预期这个安装包的大小大概在26MB左右,比之完整的.NET框架安装包,下载和安装将快很多。

.NET Framework Client安装包中的程序集和APIs跟完整的.NET框架安装包中的那些程序集和APIs是百分之百一样的,这意味着应用可以定向于NET 3.5 SP1的Client Profile和完整的Profile,不需要做重新编译。在.NET Client Profile安装包下工作的所有的 .NET应用,在完整的.NET框架下也自动工作。

开发人员可以在VS 2008 SP1中调出客户端应用的项目属性页来指定他们建造的客户端应用同时支持.NET Framework Client Profile和完整的.NET框架。在项目属性页上,他们可以选择一个新的复选框,表示它只需要包含在.NET Framework Client Profile中的那些程序集:

VS 2008然后就会确认项目只引用了发布在Client Profile安装包中的那些程序集,如果你尝试使用一个不在Client Profile中的程序集中的一个类型的话,它就会产生一个编译错误。编译好的客户端应用然后就可以在安装了完整的.NET框架的机器,以及只安装了.NET Framework Client Profile的机器上运行。

如果你有一个机器,只安装了.NET Framework Client Profile,你在上面尝试运行一个没有标记支持.NET Framework Client Profile的.NET应用的话,CLR会拒绝运行这个应用,它会提示终端用户更新到完整的.NET框架安装包。这确保应用总是可以正确地运行,开发人员不用操心在运行时遭遇缺失程序集的错误,如果用户尝试在一个只安装了.NET Framework Client Profile的机器上运行一个需要完整的.NET框架的应用的话。

我们认为很大类的.NET客户端应用将能够使用这个新的.NET Client Profile安装来显著地加速它们的安装,促成友好得多的消费者体验。

针对客户端应用的新.NET Framework Setup Bootstrapper

.NET 3.5 SP1 引进了一个新的bootstrapper组件,你可以用在客户端应用中来帮助自动确认机器上安装有正确的.NET框架版本。

这个bootstrapper组件负责自动地从Internet上下载和安装.NET Framework Client Profile或完整的.NET框架安装包,假如你的机器没有安装这2者的话。这个bootstrapper还自动地负责升级安装了早期.NET框架版本的机器。例如,假如你的机器已经安装了.NET 3.0,而你的应用要求.NET 3.5,这个bootstrapper可以只下载将其升级到.NET 3.5的那些更新文件,从而避免下载完整的.NET框架安装包。

这个安装bootstrapper组件可以用于基于ClickOnce的安装包,也可以用于第三方的安装产品(象Installshield)。这个boostrapper可以促成完全定制的安装品牌体验(象闪屏,定制的安装向导步骤等等),应该极大地方便建造优化的客户端安装体验。

ClickOnce客户端应用部署的改进

.NET 3.5 SP1包括了针对Windows Forms和WPF应用的ClickOnce部署的若干改进。其中一些改进包括:

  • 对.NET Framework Client Profile的支持(支持所有的ClickOnce功能)
  • ClickOnce应用现在可以在显示一个定制的品牌安装界面的同时,以编程的手段通过一个Setup.exe来安装
  • ClickOnce对生成MSI + ClickOnce应用包的改进
  • ClickOnce错误对话框现在支持链接到Web上特定于应用的支持网站
  • ClickOnce现在对配置文件关联有了设计时支持
  • ClickOnce应用出版商现在可以根据场景需要决定是否取消对ClickOnce manifest的签名和哈希化
  • 企业现在可以选择是否只运行被“已知出版商”Authenticode签名过的Clickonce应用,而禁止其他应用的运行
  • FireFox浏览器扩展将支持通过FireFox浏览器安装Clickonce应用

Windows Forms控件

SP1 添加了若干新的Windows Forms控件,包括新的矢量形状,打印, 以及DataRepeater控件:

 

WPF 性能之改进

.NET 3.5 SP1包括了若干WPF的显著性能优化和改进,其中一些具体的图形方面的改进包括:

  • 更平滑的动画效果
  • Blur和DropShadow位图效果的硬件加速渲染
  • 文本渲染的速度改进,特别是VisualBrish和3D镜头
  • 2D图形改进,特别是z-index场景
  • 一个新的WriteableBitmap类,将允许实时和无撕裂效果的位图更新,这将促成定制的“绘制”风格的应用,数据视觉化,和那些避开默认的WPF 2D图形APIs的图表。
  • 分层的视窗性能改进

SP1还在WPF中加了更好的数据扩缩性。ListView, ListBox 和 TreeView 控件现在支持“个项容器回收(item container recycling)”和“虚拟化(virtualization)”,允许你在卷动的场景下轻松地得到百分之四十的性能改进。这些控件现在还支持“延缓卷动(deferred scrolling)”的功能,它允许你避免实时卷动,而是等到用户放开卷动按钮时才卷动(Outlook中的默认卷动模式),这在对非常大的数据集快速卷动时会非常有用。

WPF的数据改进

.NET 3.5 SP1包括了针对WPF的若干数据绑定和编辑改进,它们包括:

  • 在{{ Binding }} 表达式中的StringFormat支持,以促成绑定值的简易格式化
  • 对继承自ItemsControl的控件中的新的交替行支持,方便在行上设置交替属性(例如,交替的背景颜色)
  • 对可编辑的控件中的null值的更好的处理和转换支持
  • 可以将验证规则施用于整个绑定个项的个项层次的验证
  • MultiSelector支持,以处理多个选择(multi-selection)和大块编辑场景(bulk editing scenarios)
  • IEditableCollectionView支持将数据控件接连到数据源,允许以事务的方式进行编辑/添加/去除个项
  • 在绑定到IEnumerable数据源时的性能改进

WPF现在还提供了钩子,允许开发人员编写支持虚拟化卷动方式的定制面板。我们将把这个支持与上面的数据绑定改进一起使用来建造将在今年稍后发布的新WPF datagrid。

WPF可扩展的Shader效果

.NET 3.5 SP1在WPF中添加了对一个新的shader效果架构和APIs的支持,它允许你创建极有表现力的视觉效果并将其施加到WPF中的任何控件和元素上。这些shader效果支持多个输入组合的混合,使它们强而有力的是WPF是使用GPU来运行这些效果的(包括你自己建造的定制效果),给与你完全的硬件加速图形性能。几乎跟WPF中的每样东西一样,你还可以在效果的属性上使用WPF数据绑定和动画效果,将它们完全整合到一种体验之中。

将一个效果施用到一个控件上是极其容易的事,只要设置控件的Effect属性就可以了。例如,要将一个硬件加速的drop-shadow效果用到一个按钮上,你可以通过代码或XAML在按钮上使用内置的<DropShadowEffect>:

这将导致按钮象这样渲染:

因为效果是可扩展的,开发人员可以创建他们自己的自定义的Effect对象,然后使用它们。例如,可以创建一个自定义的DirectionalBlurEffect,将它加到ListBox控件上,在你快速卷动时,改变它的卷动外观,使用一个模糊效果:

留意Greg Schechter的博客,了解Effects架构的工作原理的细节,以及学习如何在你的应用中创建和施加新的效果(他的第一组贴子在这里)。

注: 除了引进新的Shader效果API外, SP1中的WPF还更新了现有的Blur和DropShadow Bitmap效果以支持硬件加速。</