您的位置:首页 > 运维架构 > 网站架构

一起谈.NET技术,从原理来看Silverlight 4的架构

2011-09-01 23:43 726 查看
  简介

  在前文<<初识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上没有讲的东西。还有很多东西有待我们去发掘。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐