從原理來看Silverlight 4的架構

作者: mikelij  來源: 博客園  發布時間: 2010-10-01 00:12  閱讀: 1036 次  推薦: 0   原文鏈接   [收藏]  

  簡介

  在前文<<初識Silverlight 4及其架構>>談到要從多個方面來了解:Silverlight的原理,處理周期,部署,安全性,伸縮性,分布式計算能力,容錯能力,等等等等。這篇從原理的角度來看Silverlight 4架構相關的一些事情。

  瀏覽器的插件

  前文已經介紹過,整個Silverlight平臺中包括一個安裝器。這個安裝器負責將瀏覽器插件安裝上,并在客戶瀏覽器那里搭建起運行Silverlight程序的基礎環境。初次瀏覽Silverlight內容的客戶必須先安裝一個瀏覽器插件。安裝了插件之后,插件安裝程序向IE, Firefox等瀏覽器注入了插件。我們可以在瀏覽器中的擴展管理中看到,如圖1和圖2:

圖1

圖2

  同時我們可以看到文件夾C:\Program Files\Microsoft Silverlight\4.0.50826.0建立了。其中的文件有:

 
驅動器 C 中的卷沒有標簽。
卷的序列號是 A474
-0C97

C:\Program Files\Microsoft Silverlight\
4.0.50826.0 的目錄

2010/09/26 11:10 <DIR> .
2010/09/26 11:10 <DIR> ..
2010/08/26 00:59 5,961,544 agcore.dll
2010/08/26 00:59 15,688 agcp.exe
2010/09/26 11:09 <DIR> ar
2010/09/26 11:09 <DIR> bg
2010/09/26 11:09 <DIR> ca
2010/08/26 02:48 3,518,464 coreclr.dll
2010/08/26 00:59 73,552 coregen.exe
2010/09/26 11:09 <DIR> cs
2010/09/26 11:09 <DIR> da
2010/09/26 11:08 <DIR> de
2010/09/26 11:09 <DIR> el
2010/09/26 11:08 <DIR> es
2010/09/26 11:09 <DIR> et
2010/09/26 11:09 <DIR> eu
2010/09/26 11:09 <DIR> fi
2010/09/26 11:08 <DIR> fr
2010/09/26 11:09 <DIR> he
2010/09/26 11:09 <DIR> hr
2010/09/26 11:09 <DIR> hu
2010/09/26 11:09 <DIR> id
2010/09/26 11:08 <DIR> it
2010/09/26 11:08 <DIR> ja
2010/09/26 11:08 <DIR> ko
2010/09/26 11:09 <DIR> lt
2010/09/26 11:09 <DIR> lv
2010/08/26 02:48 253,952 Microsoft.VisualBasic.dll
2010/09/26 11:09 <DIR> ms
2010/08/26 02:48 1,589,248 mscorlib.dll
2010/09/26 11:09 6,187,008 mscorlib.ni.dll
2010/08/26 02:48 4,096 mscorrc.dll
2010/09/26 11:09 <DIR> nl
2010/09/26 11:09 <DIR> no
2010/08/26 00:59 1,023,816 npctrl.dll
2010/08/26 02:48 760,832 npctrlui.dll
2010/09/26 11:09 <DIR> pl
2010/09/26 11:09 <DIR> pt
2010/09/26 11:09 <DIR> pt-BR
2010/09/26 11:09 <DIR> ro
2010/09/26 11:08 <DIR> ru
2010/08/26 00:59 350,064 Silverlight.Configuration.exe
2010/08/26 02:48 747,520 Silverlight.ConfigurationUI.dll
2010/09/26 11:09 <DIR> sk
2010/09/26 11:09 <DIR> sl
2010/08/26 00:59 426,848 SLMSPRBootstrap.dll
2008/07/10 13:32 5,587 slr.dll.managed_manifest
2010/09/26 11:09 <DIR> sr-Cyrl-CS
2010/09/26 11:09 <DIR> sr-Latn-CS
2010/09/26 11:09 <DIR> sv
2010/08/26 02:48 536,576 System.Core.dll
2010/09/26 11:09 2,365,440 System.Core.ni.dll
2010/08/26 02:48 233,472 system.dll
2010/08/26 02:48 225,280 System.Net.dll
2010/09/26 11:09 652,288 System.Net.ni.dll
2010/09/26 11:09 665,088 System.ni.dll
2010/08/26 02:48 413,696 System.Runtime.Serialization.dll
2010/09/26 11:10 1,186,816 System.Runtime.Serialization.ni.dll
2010/08/26 02:48 520,192 System.ServiceModel.dll
2010/09/26 11:10 1,598,976 System.ServiceModel.ni.dll
2010/08/26 02:48 73,728 System.ServiceModel.Web.dll
2010/09/26 11:10 138,240 System.ServiceModel.Web.ni.dll
2010/08/26 02:48 143,360 System.Windows.Browser.dll
2010/09/26 11:10 374,272 System.Windows.Browser.ni.dll
2010/08/26 02:48 1,470,464 System.Windows.dll
2010/09/26 11:10 4,473,856 System.Windows.ni.dll
2010/08/26 02:48 319,488 System.Xml.dll
2010/09/26 11:10 844,288 System.Xml.ni.dll
2010/09/26 11:09 <DIR> th
2010/09/26 11:09 <DIR> tr
2010/09/26 11:09 <DIR> uk
2010/09/26 11:09 <DIR> vi
2010/09/26 11:08 <DIR> zh-Hans
2010/09/26 11:09 <DIR> zh-Hant
32 個文件 37,153,739 字節
42 個目錄 39,298,207,744 可用字節

  那么,在瀏覽器中的插件是怎么注冊上去的呢? 讓我們來看看注冊表。

  IE的插件:

  HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{32C73088-76AE-40F7-AC40-81F62CB2C1DA}
  HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{DFEAF541-F3E1-4c24-ACAC-99C30715084A}
  HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{DFEAF541-F3E1-4c24-ACAC-99C30715084A}\InprocServer32

  其鍵值是: c:\Program Files\Microsoft Silverlight\4.0.50826.0\npctrl.dll

  Firefox的插件:

  HKEY_LOCAL_MACHINE\SOFTWARE\MozillaPlugins\@Microsoft.com/NpCtrl,version=1.0

  Path=c:\Program Files\Microsoft Silverlight\4.0.50826.0\npctrl.dll

  ProgId: AgControl.AgControl.4.0

  增加的MIME類型:

  MIME: application/x-silverlight

  MIME: application/x-silverlight-2

  Silverlight如何工作?

  Silverlight是以宿主瀏覽器為基礎環境的。npctrl.dll作為插件直接與宿主瀏覽器接口。npctrl.dll本身是個ActiveX控件,可以供我們調用。npctrl.dll會調用agcore.dll來處理一些非托管的API, 也會調用coreclr.dll來創建一個CLR。我們編寫的Silverlight應用程序是運行在coreclr.dll創建的CLR當中的。這個圖可以很好地幫你理解:

圖3

  注:

  npctrl.dll:Silverlight plug-in

  agcore.dll and coreclr.dll:Core services

  CLR execution engine 和相關的AppDomain都是由coreclr.dll搭建的。我們的Silverlight程序運行在其中。

  Silverlight Runtime

  有一些文章提到了Silverlight Runtime這個術語。指的就是在用戶機器上安裝的用來運行Silverlight程序的環境。這篇文章提到的內容都是關于Silverlight runtime的。我們可以再多看看C:\Program Files\Microsoft Silverlight\4.0.50826.0目錄下的文件。比如BCL所在的mscorlib.dll,注意到其大小沒有,它比通常的Desktop安裝,即普通的.net framework安裝的mscorlib.dll小了不少。還有System.Windows.dll也是。我們可以查看一下其中的類型。其類型與普通的.net framework的System.Windows.dll差別挺大。

  結束語

  到目前為止,我們只看到了一點點MSDN上沒有講的東西。還有很多東西有待我們去發掘。

0
0
 
標簽:Silverlight
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()