简介
在前文<<初识Silverlight 4及其架构>>谈到要从多个方面来了解:Silverlight的原理,处理周期,部署,安全性,伸缩性,分布式计算能力,容错能力,等等等等。这篇从原理的角度来看Silverlight 4架构相关的一些事情。
浏览器的插件
前文已经介绍过,整个Silverlight平台中包括一个安装器。这个安装器负责将浏览器插件安装上,并在客户浏览器那里搭建起运行Silverlight程序的基础环境。初次浏览Silverlight内容的客户必须先安装一个浏览器插件。安装了插件之后,插件安装程序向IE, Firefox等浏览器注入了插件。我们可以在浏览器中的扩展管理中看到,如图1和图2:
图1
图2
同时我们可以看到文件夹C:\Program Files\Microsoft Silverlight\4.0.50826.0建立了。其中的文件有:
卷的序列号是 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上没有讲的东西。还有很多东西有待我们去发掘。