当前位置: 首页 > news >正文

Silverlight 结构分析

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的代码以及应用程序的代码就可以在浏览器中执行了。

CoreCLR与CLR

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

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

>> 只需要提供Workstation GC。

CoreCLR安全模型

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

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

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

Silverlight BCL

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

>> 减少尺寸

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

>> 添加特性

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

跨平台支持

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

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

3.运行

Silverlight运行环境

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

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

Silverlight运行顺序

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

>> 浏览某个带有Silverlight的网页

>> 浏览器加载Plug-in

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

>> 同时浏览器下载xap文件

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

原文链接:http://www.cnblogs.com/powertoolsteam/archive/2010/11/18/1880771.html

转载于:{}

相关文章:

  • WebStorm 2.1 发布,超强JavaScript编辑器
  • 软件工程师,你真的喜欢你的工作吗?
  • 卡巴斯基提醒网民注意:压缩文件也能变木马
  • 简单评价各种排序算法的优劣
  • 50、linux shell命令,netstat,traceroute
  • 在兄弟连的感受
  • BB进度
  • jQuery右键菜单插件ContextMenu
  • AssionShop开源B2C电子商务系统-定单流程活动图状态图(转)
  • 扩展方法的定义及使用
  • 用Restful方式调用WCF进行上传下载(转)
  • 飞雪桌面日历注册码
  • 趋势科技:Web2.0网站将成黑客首要攻击目标
  • 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用42
  • CENTOS NTFS支持
  • [LeetCode] Wiggle Sort
  • android图片蒙层
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • JAVA SE 6 GC调优笔记
  • Java小白进阶笔记(3)-初级面向对象
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Python爬虫--- 1.3 BS4库的解析器
  • spring-boot List转Page
  • sublime配置文件
  • vue总结
  • 初识 beanstalkd
  • 第十八天-企业应用架构模式-基本模式
  • 如何利用MongoDB打造TOP榜小程序
  • 源码安装memcached和php memcache扩展
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​香农与信息论三大定律
  • #DBA杂记1
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (13):Silverlight 2 数据与通信之WebRequest
  • (C++17) optional的使用
  • (二)WCF的Binding模型
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (五)网络优化与超参数选择--九五小庞
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • **PHP二维数组遍历时同时赋值
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .gitignore
  • .gitignore文件---让git自动忽略指定文件
  • .htaccess配置常用技巧
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET CF命令行调试器MDbg入门(一)
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NET处理HTTP请求
  • .NET简谈设计模式之(单件模式)