windstore

 

[原]跟我学silverlight系列教程[1]—wpf/silverlight体系架构和运行机制

一、wpf和silverlight简介

在这个教程的最开始,我们先了解下什么是wpf以及silverlight,这个至关重要,只有从根本上理解了这个概念,我们才能深入的知道它能做什么以及它适合做什么。

关于wpf的定义,在msdn中是这样定义的:“WPF是下一代显示系统,用于生成能带给用户震撼视觉体验的 Windows 客户端应用程序。使用 WPF,您可以创建广泛的独立应用程序以及浏览器承载的应用程序。”

关于silverlight的定义,msdn中是这样定义的:“Silverlight 是一种跨浏览器、跨平台的 .NET Framework 实现,用于为 Web 生成和提供下一代媒体体验和丰富的交互式应用程序 (RIA)。Silverlight 统一了服务器、Web 和桌面的功能,统一了托管代码和动态语言、声明性编程和传统编程以及 Windows Presentation Foundation (WPF) 的功能。”

从以上的定义我们可以看出,不管wpf还是silverlight都是用来提供一套新的界面层的相关技术框架,用来支持RIA。伴随着对RIA的支持,这代表着下一代UI层实现的技术也整合了一系列的相关技术和概念,如XAML、声明式编程、依赖属性、路由事件、数据绑定、多媒体支持等等。

其实对于一个有丰富的.net开发经验的人来说,学习silverlight和wpf只要把握住几个重要的概念,学习起来应该是很轻松的,本系列课程正是围绕着这一系列的关键概念进行讲解的。

二、wpf和silverlight的区别
在最早期,silverlight不叫silverlight,叫wpf/e,大家从这个名字应该也可以看出它和wpf之间的渊源。这个应该是微软的战略,即wpf是提供基于桌面开发的框架,而wpf/everywhere即支持浏览器,可以跨平台、跨浏览器无障碍的运行。只不过后来又取了这个牛逼闪闪的名字“silverlight”。

基于它们的功能和实现不同(wpf是为客户端应用程序提供支持,而silverlight是通过浏览器或其它宿主进行跨平台、扩浏览器运行),它们的体系架构也是各不相同的。

最基本的区别就是:

wpf的运行是需要.net运行时,以及安装.net framework框架的。因为目前.net framework框架仅支持windows平台,这也就限制了wpf仅仅能在windows平台运行。而silverlight的运行需要安装一个安装包,其实这个安装包也就是一个微缩版的.net framework,包大小约为3M,把silverlight.exe用winrar解压后,就能看到其包内是一些.net dll,都是silverlight运行时必须的。其中一个比较重要的dll是coreclr.dll,它负责在宿主内提供.net运行时,所以silverlight不是用本机安装的.net framework。这也就是为什么silverlight不需要客户端安装.net framework了,因为它自身提供了。

另外需要注意的一点就是silverlight包里的dll虽然名字和.net framework的dll名字一样,但是其实其dll版本号、内部的实现、大小都是不一样的,为什么呢?因为大家都知道,silverlight安装包是需要下载安装的,如果包太大,肯定是不合适的。所以为了压缩,就把.net framewrok 的核心dll,比如System.Core.dll、system.dll等等里面一些silverlight用不到的类啊什么的都去掉了(我猜测的o(∩_∩)o)。所以说silverlight的同名dll里的类实现相对少一些。 所以当你搞silverlight编程时,发现以前常用的类或者方法找不到的时候,不要感到诧异哦。举个例子,对xml的很多操作类在silverlight版的框架里就没有。这个后面的系列教程会设计的,请持续关注windstore的序列教程.:)

 

三、wpf和silverlight的体系架构

wpf的架构如下:

                          (图一)

File:WPF.svg

                           (图二)

从以上可以看出,wpf的架构相对来说比较纯净,红色的是wpf相关的组件,而蓝色的则是windows系统本身就具有的,与wpf框架无关。

蓝色的组件中:

user32、 kernel、directx这3个提供windwos平台基础组件库,基本上所以的windows平台的应用程序都会用到.

CLR则是提供了.net框架的运行时环境,这个没什么好说的。

 

红色的wpf相关的组件有3个:

presentationFramework和PresentationCore提供了wpf技术相关的环境、类库支持等所有的功能包含。

milcore是非托管的dll,也是属于wpf组件一部分,主要是用来wpf中和directx交互的中间层。wpf中所有的渲染、动画、2D、3D图形都是用的这个类库来同directX交互,至于为什么用非托管代码,最主要还是基于性能考虑,因为界面渲染是wpf技术的基础,所以对性能的要求比较高。

 

 silverlight的架构如下:

Silverlight 体系结构

  相比wpf来说,silverlight框架就不显得那么单纯了,甚至让人感觉很复杂。因为wpf是基于.net framework框架的,自身只提供其表示层功能相关的支持。而silverlight却要提供一套独立的环境,包括核心层表示、clr、.net自身相关类库支持、和宿主交互的api支持、xaml解析、通讯框架、还有wpf控件支持等等。所以,很多人说silvrlitht简单,是因为silverlight的表示层功能和wpf相比缩减了很多,但是实际上其整个框架比wpf还复杂多了。

好了,具体来看下:

silverlight框架从上图看可分为这么几部分:

1.浏览器、宿主相关部分

这部分主要提供silverlight的宿主需求,包含了浏览器的一系列特性,silverlight安装包本身。这一部分和silverlight的关系紧密,也是和silverlight交互的纽带。

2.表示层核心部分

这层是silverlight里的核心部分,主要负责接受用户输入、多媒体处理、xaml解析、Ui呈现等,这点和wpf尤其不同,wpf的类似的这些操作都是自身的类库实现的。而silverlight的这部分是由非托管类库agcore.dll,这个类库负责了silverlight呈现相关的大部分功能,以及提供silverlight托管环境和宿主(如浏览器)之间的接口交互。

3.xaml部分

xaml不用说了,主要负责呈现,是.net框架和表示层核心之间交互的桥梁。

4. .net运行时

提供.net运行时,前面已经说过了,是由coreclr.dll负责提供实现的。

5. .net其它相关类库(如wpf控件库、wcf、Linq、DLR、js托管Api)

这些都属于silverlight框架里的附属类库,主要提供相关的.net技术的支持,如wcf、wpf控件、dlr、linq.这些都作为silverlight框架的一部分单独剥离出来的。

下面再看一下silverlight整个框架之间是怎么交互的:

Silverlight 浏览器组件

在该图中,

浏览器作为整个silverlight运行的宿主,

silverlight插件被浏览器加载后会执行一系列的动作,如调用核心服务,初始化建立.net运行时环境,从服务器端下载.xap包等操作。
其中核心服务主要用来提供宿主和silverlight之间的交互,已经silverlight底层支持,如前面说的核心表示层就是由核心服务来提供的。主要是agcore.dl。

其实只要理解silverlight整个框架是完全脱离于本机的完整的那个.net framework框架,这些就不难理解了。从上面的框架结构可以看出,silverlight和wpf虽然有些类似,比如xaml、控件、还有一些机制(如路由事件、依赖属性),但是其底层的框架结构和实现基本上是完全不同的。这节就先讲到这里吧,感觉有些乱,呵呵,以前很少写文章,大家有什么问题可以给我留言。

 

posted on 2011-08-28 14:30  清虚真人  阅读(7356)  评论(9编辑  收藏  举报

导航