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中而被執行的。coreclr簡單來說就是clr for silverlight,就是專門為silverlight而定製的clr,用來執行silverlight**。其他的dll檔案在wpf的類庫中都有,只不過現在尺寸小了很多,這是作為瀏覽器應用所必須的。>>agcore.dll
silverlight presentation foundation,包括多**展示、基於向量的繪製引擎等等。這個dll為什麼會以「ag」打頭哪?在元素週期表中銀(silver)是47號元素, 被稱為ag(拉丁語),所以微軟就把silverlight的展現層assembly稱為「agcore」了-:)
>>coreclr.dll
>>mscorlib.dll
>>system.*.dll
下圖是silverlight architecture的圖例,你可以把上面的dll對號入座:
如何才能使.net**在web前端執行,如何才能使我們熟悉的.net技術繼續適用於web前端,於是微軟推出了coreclr。簡單來說就是coreclrbring .net to web.
如同clr可以使得.net**在桌面應用程式中執行一樣,有了coreclr,.net framework的**以及應用程式的**就可以在瀏覽器中執行了。
coreclr與clr
coreclr與clr有什麼差別哪?首先兩者是基於同乙份**庫,其執行引擎完全相同。只是為了使的clr更適合web,做了一些事情:
>> 基於web應用場景,對jit進行優化,加快程式啟動時間;coreclr安全模型web應用程式都是不被信任的,你不能容忍乙個web應用程式來操縱使用者本地的資料,或者在瀏覽器中的其他應用程式。>> 只需要提供workstation gc。
一貫以來,.net開發人員使用cas來阻止不受信任的**執行特權操作。考慮到silverlight只需乙個沙箱,而該沙箱又等同於web頁面中用來執行指令碼的沙箱。coreclr簡化了安全模型,去掉了cas模型,定義所有的應用程式**都是透明**,信任級別最低,它無法提公升許可權或訪問計算機上的敏感資源或資訊。
對於silverlightoob的應用來說,可以通過一些配置來使其在受信環境中執行。
silverlight bcl
silverlight base class library是.net base class library的子集,完全基於原來的**基構建。為了適應web應用的需求,做了一些改變:
>>減少尺寸>>新增特性同時也為silverlight新增了必要的特性功能,例如isolatedstorage等等。跨平台支援
在pal層上定義了跟win32相同的api介面,在mac作業系統上會被重新定向。
3.執行
silverlight執行環境
下圖是msdn關於silverlight執行環境的圖例:
silverlight執行順序
最後我們看一下silverlight應用在瀏覽器中是如何被執行的:
>> 瀏覽某個帶有silverlight的網頁>> 瀏覽器載入plug-in
>> plug-in建立coreclr以及其他的服務
Silverlight 結構分析
silverlight是微軟提供的一種web前端應用程式開發框架,是微軟ria的主要應用程式開發平台。silverlight以瀏覽器的外掛程式方式,提供豐富的多 展示功能以及更多互動性的web前端解決方案。本文的重點在於 silverlight的整體架構,以及silverlight應用程式是如何在瀏...
Silverlight 結構分析
silverlight是微軟提供的一種web前端應用程式開發框架,是微軟ria的主要應用程式開發平台。silverlight以瀏覽器的外掛程式方式,提供豐富的多 展示功能以及更多互動性的web前端解決方案。本文的重點在於 silverlight的整體架構,以及silverlight應用程式是如何在瀏...
分析Silverlight跨域呼叫
分析silverlight跨域呼叫 在silverlight開發的過程中不免要遇到跨域的問題,在這裡以跨域呼叫webservice為例子來分析一下跨域的問題。先介紹一下我的測試專案,我用flash和silverlight一同來呼叫乙個webservice,乙個flash客戶端,乙個silverlig...