Silverlight 结构分析

简介: Silverlight是微软提供的一种Web前端应用程序开发框架,是微软RIA的主要应用程序开发平台。Silverlight以浏览器的插件方式,提供丰富的多媒体展示功能以及更多交互性的Web前端解决方案。

Silverlight是微软提供的一种Web前端应用程序开发框架,是微软RIA的主要应用程序开发平台。Silverlight以浏览器的插件方式,提供丰富的多媒体展示功能以及更多交互性的Web前端解决方案。

本文的重点在于探讨Silverlight的整体架构,以及Silverlight应用程序是如何在浏览器中运行的,各个子部分的作用是什么。

 

1.      整体结构

Silverlight是以浏览器插件方式运行的,在安装完Silverlight后,我们来看一下安装目录:C:\ProgramFiles\Microsoft Silverlight\4.0.50917.0,主要文件如下:

-   npctrl.dll

实现了浏览器plug-in接口,Silverlight通过这个ActiveX控件与宿主浏览器进行交互。该Assembly会调用agcore来进行绘制,以及coreclr来创建CLR,Silverlight应用程序就是依赖于这个CLR中而被运行的。

-   agcore.dll

Silverlight Presentation Foundation,包括多媒体展示、基于向量的绘制引擎等等。这个DLL为什么会以“ag”打头哪?在元素周期表中银(Silver)是47号元素,被称为AG(拉丁语),所以微软就把Silverlight的展现层Assembly称为“agcore”了-:)

-   coreclr.dll

-   mscorlib.dll

-   system.*.dll

Coreclr简单来说就是CLR for Silverlight,就是专门为Silverlight而定制的CLR,用来执行Silverlight代码。其他的DLL文件在WPF的类库中都有,只不过现在尺寸小了很多,这是作为浏览器应用所必须的。

下图是Silverlight architecture的图例,你可以把上面的DLL对号入座:

 

 

2.      CoreCLR

如何才能使.Net代码在Web前端执行,如何才能使我们熟悉的.Net技术继续适用于Web前端,于是微软推出了CoreCLR。简单来说就是CoreCLRbring .NET to Web.

如同CLR可以使得.Net代码在桌面应用程序中执行一样,有了CoreCLR,.Net Framework的代码以及应用程序的代码就可以在浏览器中执行了。

2.1  CoreCLR与CLR

CoreCLR与CLR有什么差别哪?首先两者是基于同一份代码库,其执行引擎完全相同。只是为了使的CLR更适合Web,做了一些事情:

-   基于Web应用场景,对JIT进行优化,加快程序启动时间;

-   只需要提供Workstation GC.


2.2  CoreCLR安全模型

Web应用程序都是不被信任的,你不能容忍一个Web应用程序来操纵用户本地的数据,或者在浏览器中的其他应用程序。

一贯以来,.NET开发人员使用CAS来阻止不受信任的代码执行特权操作。考虑到Silverlight只需一个沙箱,而该沙箱又等同于 Web页面中用来运行脚本的沙箱。CoreCLR简化了安全模型,去掉了CAS模型,定义所有的应用程序代码都是透明代码,信任级别最低,它无法提升权限或访问计算机上的敏感资源或信息。

对于SilverlightOOB的应用来说,可以通过一些配置来使其在受信环境中运行。
 


2.3  Silverlight BCL

Silverlight base class library是.Net base class library的子集,完全基于原来的代码基构建。为了适应Web应用的需求,做了一些改变:

-    减少尺寸

作为浏览器插件,用户需要快速的下载安装,运行,Silverlight提供的类库必需具有很小的尺寸。所以基于浏览器应用的特点移除一些不必要的特性,例如Console,COM操作,还有CodeAccess Security等等。

-    添加特性

同时也为Silverlight添加了必要的特性功能,例如IsolatedStorage等等。

2.4  跨平台支持

Silverlight提供了一个平台抽象层来支持更多的操作系统例如MacOS X,如下图:

 

在PAL层上定义了跟Win32相同的API接口,在Mac操作系统上会被重新定向。

 

3.      运行

3.1  Silverlight运行环境

Silverlight应用程序被托管在浏览器中,通过Silverlight插件加载CoreCLR,然后CoreCLR为应用程序创建AppDomian,最后初始化SilverlightApplication类。

下图是MSDN关于Silverlight运行环境的图例:

 

 

3.2  Silverlight运行顺序

最后我们看一下Silverlight应用在浏览器中是如何被执行的:

-   浏览某个带有Silverlight的网页

-   浏览器加载Plug-in

-   Plug-in创建CoreCLR以及其他的服务

-   同时浏览器下载xap文件

-   CoreCLR创建AppDomain,最后实例化Application类。

 

全文完。

最近再做一些基于Silverlight的控件开发,感觉需要从结构上来梳理一下Silverlight。

写的比较仓促,希望批评指正。

 

作者:Ted    葡萄城资深架构师,控件产品专家

相关文章
理解 Delphi 的类(一) - 从结构/记录谈起
理解 Delphi 的类(一) - 从结构/记录谈起
128 0
理解 Delphi 的类(一) - 从结构/记录谈起
网页基本结构框架
通过以下的方法可以更好的了解网页的一些基本结构框架。
154 0
|
C# 前端开发
WPF - 本质:数据和行为
原文:WPF - 本质:数据和行为   如果自己来做一个UI框架,我们会首先关注哪些方面?我想UI框架主要处理的一定包括两个主要层次的内容,一个是数据展现,另一个就是数据操作,所以UI框架必须能够接收各种不同的数据并通过UI界面展现出来,然后可以通过控件行为来操作这些数据,也就是UI框架的数据(Data)和行为(Behavior)。
901 0
|
C# BI
wpf中xps文档合并功能实现
原文:wpf中xps文档合并功能实现      跟着上一篇的xps文档套打的文章,近期一直在研究xps打印技术,其中用户提到了一个需求,要求能够多页面进行打印,我的想法是,先生成xps文件,然后将文件读取出来以后,合并成一个文件来处理。
1089 0
|
存储 JavaScript Android开发
第十章:XAML标记扩展(三)
资源词典 Xamarin.Forms还支持第二种共享对象和值的方法,虽然这种方法比x:静态标记扩展稍微有点开销,但它更通用 - 因为所有东西 - 共享对象和使用的可视元素 它们 - 可以用XAML表示。
1194 0
|
XML JavaScript Android开发
第十章:XAML标记扩展(二)
访问静态成员 IMarkupExtension最简单和最有用的实现之一封装在StaticExtension类中。 这是原始XAML规范的一部分,因此它通常出现在带有x前缀的XAML中。 StaticExtension定义了一个名为Member of string的属性,您可以将其设置为公共常量,静态属性,静态字段或枚举成员的类和成员名称。
1061 0
|
JavaScript Android开发 Windows
|
前端开发 安全 .NET