其实很犹豫是否应该讲讲Silverlight的体系结构。一般很多人是不很愿意去看这些理论的东西。不过我想了解一下应该对你的认识和熟悉Silverlight是很有帮助的。虽然在看的时候,也许你会存有疑惑,不过我想我应该会在后面慢慢将其揭开。所以还是决定讲讲。
概 要
- 什么是Silverlight?
- Silverlight和.net framework的关系
- 简单了解Silverlight平台
什么是Silverlight
- 类似Flash的效果在网页中,只是Silverlight很好的和服务器通讯,可以利用Silverlight提供更好的界面体验同时强于Flash。
- 它是一个典型的运行在“沙箱”中的程序,也就是说它只能有限的访问客户端机器上的资源,但可以提供很好用户体验。
- 如果要比较只能把它和Flex技术进行比较。为了理解方便我才在前面提及到Flash。
以上表明了一点,如果我们想运行Silverlight就必须安装它的“插件”,就是 Microsoft Silverlight 3 Developer Runtime。
当你安装Silverlight SDK 或 Silverlight Tools 3.0 software for VS2008的时候它就会被安装。只有安装了Runtime才能运行Silverlight的应用程序。这个Runtime的安装包中包含:
1.承载Silverlight应用的程序的插件。
2.支持运行程序的基础架构。
Silverlight 和.net framework的关系
严格意义上,Silverlight是.net frameworkd的子集。Silverlight拥有自己的一套framework,被称为 .net framewor for Silverlight。
虽然这个framework看上去类似于.net framework的架构体系,但实际上他们是不一样的。.net framework for Silverlight 是全新的,但受.net framework 的支持。如果你的机器并没有安装.net framework 包也一样可以运行Silverlight,只要你安装了Microsoft Silverlight 3 Developer Runtime。以下几点要注意:
- 如果你建立一个基于.net framework的项目,在项目中你可以应用Silverlight的相关程序集包括SDK和runtime。
- 如果你建立了一个Silverlight的应用程序或类库项目,那么你想在其中引用.net framework中的程序集是不可能的。因为在Silverlight的范围内是不支持.net framework的。
也就是说,对于.net framework而言,它能支持Silverlight,但对于Silverlight而言它是不支持面向.net framework的开发的。这也就意味着如果你在开发Silverlight的应用程序的话,那么你原有的基于.net framework的东西是无法直接使用的。但在vs2008中可以调整一个类库项目的属性转变当前的.net framework的项目为一个.net framework for Silverlight的项目。
设置步骤:选中项目文件>右击>点击属性>在属性的“应用程序”中>> 勾选“仅使用客户端框架”
现在我们其实面对了两个.net framework, 一个是传统的一个是面向Silverlight. 虽然他们使用不同的框架在开发,但他们两者有高度的相似度,几乎原来定义在.net framework上基础类在Silverlight的框架中都原封不动的保留下来,包括类的名称,用法等。这样做有一个好,我们只需要引用不同框架下的相应程序集就可以实现从.net framekwork到Silverlight的转变。
简单了解Silverlight平台
在开始了解Silverlight平台前,请看看先前章节中提到的xap包。你可以将Hello word application(也许你完成了,如果没有你可以建立一个新的,直接编译就可以了)项目中位于ClientBin文件夹下的HelloWorld.xap复制到任何一个地方,将其后缀名由xap改成zip.然后用工具打开看看所谓的程序包里到底装了写什么东西。如果你做的程序足够简单你会看到两个文件
AppManifest.xaml 和 HelloWorld.dll文件,这些文件会被下载到客户端,然后被客户端runtime运行。
这里经历了几个步骤:
- 获得请求后,Silverlight的xap包及相关的资源会被下载到本地(这个过程是由Silverlight插件触发的)。
- 在客户端,一旦程序包下载完毕就会将其载入到程序域中执行。
也就是说,Silverlight的平台是运行在客户端的,并不是像asp.net那样运行在服务器端的。对于Silverlight平台而言,它是由核心表现层框架、.NET Framework for Silverlight 和一个安装程序和更新组件组成。
组件 | 说明 |
核心表示层框架 | 面向 UI 和用户交互的组件和服务(包括用户输入、用于 Web 应用程序的轻量型 UI 控件、媒体播放、数字版权管理和数据绑定)以及表示层功能(包括矢量图形、文本、动画和图像)。此外还包括用于指定布局的可扩展应用程序标记语言 (XAML)。 |
.NET Framework for Silverlight | .NET Framework 中包含组件和库的一个子集,其中包括数据集成、可扩展 Windows 控件、网络、基类库、垃圾回收和公共语言运行时 (CLR)。 .NET Framework for Silverlight 的某些部分是通过应用程序部署的。这些"Silverlight 库"是未包括在 Silverlight 运行时中但将在 Silverlight SDK 中提供的程序集。在应用程序中使用 Silverlight 库时,它们会与应用程序打包在一起,并下载到浏览器中。这些库包括新的 UI 控件、XLINQ、整合 (RSS/Atom)、XML 序列化和动态语言运行时 (DLR)。 |
安装程序和更新程序 | 是一个安装和更新控件,可简化用户首次安装该应用程序的过程,以后可提供低影响自动更新。 |
我不想从Silverlight Documentation 中copy这个到这里,但怎么能不说明呢?虽然不上面的解释有些不适让人很好理解,然后总比没有一个标准的基础上再做解释来的好的。
同时我还要copy一幅说明它们的图到这里,不过在做后我会对这一切都一个明白的解释。所以希望你能看完。
你可以看到我把上面分割成了三个部分。
C:表示支持Silverlight 的安装和更新的组件。也可以说C就是我们所说的插件,但不完全是。
集成网络协议栈:要通过网络通信就需要它。
DOM 集成:要和浏览器良好沟通就需要它,Silverlight是不可能不和浏览器打交道的。
应用程序服务:提供如果启动、装载和维持应用程序的必要服务,没有它Silverlight就无法运行。
安装程序:随着技术升级,相应的Microsoft Silverlight Developer Runtime也会不断更新。它提供了一种智能更新必要组件的方式。
B:这个部分主要处理图形、呈现、媒体处理及接收输入等方面的处理,它主要和操作系统以及硬件方面的支持打交道。没有它Silverlight是无法帮你提供多样化的视觉听觉及媒体处理方面的效果的。
B和A之间你可以看见是XAML,你可以通过XAML的定义直接访问B中提供的支持(原来传统的概念中,如果我们要去获得类似的支持只能通过.net framework提供的API在访问。但现在你不仅仅可以通过API来用编程的方式来访问还可以通过XAML定义的方式来访问。也就是说在这里你有了两套API可以使用来达到相同的目的。当然XAML不仅仅是只能访问B中的功能而已。几乎是你能用代码实现的用XAML也可以实现。这是很有趣的一点。
A: 是.net framework for Silverlight 我们觉得比较熟悉的一个部分,它类似于.net framework的体系结构甚至类的名称几乎都是一样的,虽然它是全新的相对于.net framework而言。这里我就不多解释了。
在A的右边灰色的区域并不属于.net framework for silverlight的一部分,它是为了支持能够在浏览器中通过脚本的方式来开发Silverlight而设计的。