天天看點

一起談.NET技術,Silverlight 結構分析   1、整體結構   2、CoreCLR   3、運作

  Silverlight是微軟提供的一種Web前端應用程式開發架構,是微軟RIA的主要應用程式開發平台。Silverlight以浏覽器的插件方式,提供豐富的多媒體展示功能以及更多互動性的Web前端解決方案。

  本文的重點在于探讨Silverlight的整體架構,以及Silverlight應用程式是如何在浏覽器中運作的,各個子部分的作用是什麼。

  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對号入座:

一起談.NET技術,Silverlight 結構分析   1、整體結構   2、CoreCLR   3、運作

  如何才能使.Net代碼在Web前端執行,如何才能使我們熟悉的.Net技術繼續适用于Web前端,于是微軟推出了CoreCLR。簡單來說就是CoreCLRbring .NET to Web.

  如同CLR可以使得.Net代碼在桌面應用程式中執行一樣,有了CoreCLR,.Net Framework的代碼以及應用程式的代碼就可以在浏覽器中執行了。

  CoreCLR與CLR有什麼差别哪?首先兩者是基于同一份代碼庫,其執行引擎完全相同。隻是為了使的CLR更适合Web,做了一些事情:

  基于Web應用場景,對JIT進行優化,加快程式啟動時間;

  隻需要提供Workstation GC.

  Web應用程式都是不被信任的,你不能容忍一個Web應用程式來操縱使用者本地的資料,或者在浏覽器中的其他應用程式。

  一貫以來,.NET開發人員使用CAS來阻止不受信任的代碼執行特權操作。考慮到Silverlight隻需一個沙箱,而該沙箱又等同于 Web頁面中用來運作腳本的沙箱。CoreCLR簡化了安全模型,去掉了CAS模型,定義所有的應用程式代碼都是透明代碼,信任級别最低,它無法提升權限或通路計算機上的敏感資源或資訊。

  對于SilverlightOOB的應用來說,可以通過一些配置來使其在受信環境中運作。  

  Silverlight base class library是.Net base class library的子集,完全基于原來的代碼基建構。為了适應Web應用的需求,做了一些改變:

  減少尺寸

  作為浏覽器插件,使用者需要快速的下載下傳安裝,運作,Silverlight提供的類庫必需具有很小的尺寸。是以基于浏覽器應用的特點移除一些不必要的特性,例如Console,COM操作,還有CodeAccess Security等等。

  添加特性

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

  Silverlight提供了一個平台抽象層來支援更多的作業系統例如MacOS X,如下圖:

一起談.NET技術,Silverlight 結構分析   1、整體結構   2、CoreCLR   3、運作

  在PAL層上定義了跟Win32相同的API接口,在Mac作業系統上會被重新定向。

  Silverlight應用程式被托管在浏覽器中,通過Silverlight插件加載CoreCLR,然後CoreCLR為應用程式建立AppDomian,最後初始化SilverlightApplication類。

  下圖是MSDN關于Silverlight運作環境的圖例:

一起談.NET技術,Silverlight 結構分析   1、整體結構   2、CoreCLR   3、運作

  最後我們看一下Silverlight應用在浏覽器中是如何被執行的:

  -   浏覽某個帶有Silverlight的網頁

  -   浏覽器加載Plug-in

  -   Plug-in建立CoreCLR以及其他的服務

  -   同時浏覽器下載下傳xap檔案

  -   CoreCLR建立AppDomain,最後執行個體化Application類。

一起談.NET技術,Silverlight 結構分析   1、整體結構   2、CoreCLR   3、運作

  最近再做一些基于Silverlight的控件開發,感覺需要從結構上來梳理一下Silverlight。

  寫的比較倉促,希望批評指正。

繼續閱讀