一起谈.NET技术,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。

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

目录
相关文章
|
15天前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
27 3
|
15天前
|
开发框架 安全 Java
.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力
本文深入探讨了.NET技术的独特魅力与优势,涵盖高效的开发体验、强大的性能表现、高度的可扩展性及丰富的生态系统等方面,展示了其在软件开发领域的核心竞争力。.NET不仅支持跨平台开发,具备出色的安全性和稳定性,还能与多种技术无缝集成,为企业级应用提供全面支持。
24 3
|
18天前
|
人工智能 开发框架 前端开发
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
|
21天前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
19天前
Visual Studio 快速分析 .NET Dump 文件
【11月更文挑战第10天】.NET Dump 文件是在 .NET 应用程序崩溃或出现问题时生成的,记录了应用程序的状态,包括内存对象、线程栈和模块信息。通过分析这些文件,开发人员可以定位和解决内存泄漏、死锁等问题。在 Visual Studio 中,可以通过调试工具、内存分析工具和符号加载等功能来详细分析 Dump 文件。此外,还可以使用第三方工具如 WinDbg 进行更深入的分析。
|
17天前
|
人工智能 开发框架 安全
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
|
2月前
|
人工智能 开发框架 Cloud Native
C#/.NET/.NET Core技术前沿周刊 | 第 9 期(2024年10.07-10.13)
C#/.NET/.NET Core技术前沿周刊 | 第 9 期(2024年10.07-10.13)
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
44 7
|
3月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
68 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
52 0