zoukankan      html  css  js  c++  java
  • Silverlight运行原理 解析综合版(一)

    Silverlight运行原理

    Silverlight通过什么方式和服务器端的托管代码进行交互。
    Silverlight也许是把托管dll下载到本地执行。
    用工具跟踪http请求后,果然如此。

    1. IE加载页面后。IE缓存中加载了 HTML页面、Silverlight.JS、XAP应用程序包。

    clip_image002[7]

    2.FF调试网络通信发现。先加载HTML页面-- Silverlight.JS---得到一个LInkID--- XAP应用程序包—安装Silverlight的图片

    clip_image004
    -得到一个LInkID,其实也是下面那个图片。PNG也是那个图片

    clip_image006

    clip_image008

    原来Silverlight按xaml里指定的类库名,下载相应的 .dll和 .pdb文件(他们结合在一起是一个 XAP应用程序文件包)到客户端,在本地环境加载后执行。
    这样看来,下载完所有库后,Silverlight运行原理就和Winform是一样的了。
    同样的原因,Silverlight项目编译的文件都放在ClientBin 的目录下,就是说这个目录的文件都是要下载到客户端运行的。用于支持Silverlight的运行。

    那么为什么应用程序已经下载下来了。却还是可以在断点调试啊。这个和ASP.NET的原理是一样的。IIS的虚拟目录指向的就是你的VS中的项目目录。而VS中的调试是针对于IIS的请求的处理。 Silverlight3.0 JS代码和后台调试的关系是后台代码可调试,而JS不可调试。是因为下面写了

    Silverlight调试 指的是什么

    VS为什么可以响应JS调试:调试前的设置你会发现。JS调试必须先把浏览器的禁用调试设置不选。这证明其实JS的调试虽然是通过VS来运行的。可VS在调试JS中时的作用和FireBUG一样的。都是针对浏览器调试的。而为什么有人说调试JS时,后台就没办法调试。JS调试针对是浏览器的。后台调试是针对IIS的请求的。所以这样时他们是没有冲突的。

    测试前注意:IE开禁用脚本调试

    不选择 Silverlight调试时。XAML的后台断点被忽略。JS和后台代码都可以调试。

    当开Silverlight调试时,JS代码的VS调试器提示不能用。因为他开一个用于检测Silverlight了。所以说JS调试和Silverlight冲突。clip_image010

    结构:

    clip_image012

    Ø Silverlight 项目文件结构

    一个标准的Silverlight项目一般包括如下几个部分:

    ² Web页面:用于嵌入或是宿主基于Silverlight的应用程序。

    在<head>部分包含了两个独立的javascript文件,这两个javascript脚本分别用于创建silverlight和检查本地是否安装silverlight插件。

    一个<div>中包含Silverlight,它由<Head>中的<Style>定义一个样式,而<div>里面是一行简单的Javascript函数调用创建silverlight。这个函数在前面包含的单独javascript文件中。

    ² Javascript文件

    Silverlight.js:辅助创建Silverlight插件的文件, 其中定义了创建Silverlight的CreatObject和CreatObjectEx方法,定义了Silverlight版本检查代码和实例化Silverlight插件的代码。

    TestPage.HTML.js:调用Silverlight.js中的CreatSilverlight方法创建Silverlight插件。

    负责使用silverlight专属的对象提取一个XAML文件,并把这个XAML转换成Silverlight。

    ² XAML文件:用于定义Silverlight应用程序的用户界面元素

    如同Flash的SWF文件一样,不过SWF文件既包括资源又包括逻辑,并且是不可读的,而XAML只包括资源和表现形式,不包括程序逻辑,并且是可读的。

    每一个XAML文件都对应一个相同文件名+".cs"或者".vb"的服务器端代码,和ASPX的CodeBeside很相似。

    ² Silverlight插件:用于输出Silverlight内容,它使用HTML的<Object>或<Embed>标签嵌入HTML

    Ø Silverlight 工作原理

    A. 从浏览器发出HTTP请求,服务器接到后返回HTML、Javascript

    B. Javascript首先检查是否安装了Silverlight插件,如果没有则提供下载

    C. Javascript开始创建Silverlight,并从服务器下载XAML文件

    D. Silverlight的Javascript检查到XAML文件后,根据需要向服务器请求程序逻辑(不管后台是cs的源代码还是编译好的,程序逻辑始终是后台负责编译并执行的,然后把执行结果透过XML传递给前台)。由于请求和响应的内容很短,是类似Ajax的,所以如果网络带宽够用的话应该不会很卡。

    E. 本地Javascript接到响应后根据响应结果显示效果   

     

    注意:上面只是创建。如果是运行 请参见 运行原理。

     

    Ø Silverlight与ASP.NET / Ajax.Net

    我们刚才有提到Silverlight整合既有的网页技术,这也包含了ASP.NET与Ajax.NET,因此就设计上可以补强二者关系,若以深入来谈 Silverlight可以与任何的Ajax程式来沟通,包含前端与后端(Client & Server side),所以ASP.NET与Ajax.Net能用来控制Silverlight为基底的视觉化资料,来表现出丰富的使用者介面,举例来说,您可以在 Silverlight指向到另支一支程式,或是用依据程式需求来播放一个影片。

    Ø 配置Silverlight的服务器

    部署Silverlight到产品Web服务器是一个相当容易的过程,尽管有时候会有一些错觉——譬如,认为Silverlight需要部署在基于微软的Web服务器(IIS)上, Silverlight不强制一定部署在基于微软的Web服务器上,Apache也可以像IIS一样,轻松愉快的支持Silverlight运行。Web服务器通常都只支持有限种已知扩展名的静态文件内容,Silverlight引入了两个新的文件扩展,因此,你需要为web服务器添加MIME类型,这样才能让Web服务器识别并处理那些类型的文件。

    Ø Silverlight与Adobe Flash

    Silverlight与Flash有着不同的技术基础:Flash使用“半公开”的二进制格式而Silverlight基于声明性编程方式WPF。

    为了清楚的展示Microsoft®®在RIA的展示层、语言、工具架构上的不同,有两者架构比较图如下:

    clip_image013

    Silverlight 全系列 – Hello word application

    如果你已经配置好了你的开发环境,如果没有你可以参考 Silverlight 全系列 - 开始

    简 要

    1.我会在这里将同一个例子用两个开发环境完成:Vs2008 和 Microfot Expression Blend 3。

    2.解释一个典型的Silverlight项目的文件结构和构成。

    3.简单解释一个Silverlight项目如何运行的。

    4.完成HellowWorld Application。

    5.MainPage.xaml 和 MailPage.xaml.cs关系。

    Microsft Expression Blend 3 :是一个华丽的可视化的开发环境,主要利用它来做界面布局和美工相关的工作,当然其实它的功能远远不止这一点点。

    开始使用vs2008建立HelloWorld

    1.开启Vs2008新建一个项目:文件>>新建项目.

    2. 在“新建项目”对话框中选择:C# >> Silverlight Application. 为项目取名为:Helloworld

    alt="SilverlightSerial_Hellowworld_CreateNewProject" title="SilverlightSerial_Hellowworld_CreateNewProject" v:shapes="_x0000_i1027">

    3.点击确定,然后可以看见如下的对话框:

    clip_image015

    因为Silverlight需要本质上运行在一个插件环境中,所以它需要一个宿主来承载它。这个界面就是在询问你是否需要同时建立一个Web Application来承载Silverlight Application。当然如果你只是独立的开发Silverlight Application那么也可以不用将Host the Silverlight Application in a new Web site前的勾勾去掉。如果是这样,那么你的Silverlight Application会在你需要调试的时候帮你生成一个html的用于测试的页面来承载你的Silverlight.

    程序文件结构

    如果你直接点击“OK”(确定)就得到如下的显示的内容:

    clip_image016

    一旦你完成,你就可以Solution里面的为你创建的文件结构。有必要做一个简单的介绍,一般了解Silverlight开发环境都有些什么构成

    首先你会看见一个HelloWorld project. 这是一个“Silverlight Application” 类型的项目。Silverlight 无法使用传统的.net framework平台的类库,它有属于自己的开发平台。

    在Silverlight Application 项目中,你可以看见被我标识的A,B.其中:

    A:是必要的,当Silverlight被启动是首先会执行这个它。它是继承Application类而来的一个特定的App对象,主要帮你完成应用程序的初始化的工作和启动应用程序,就是我们知道“程序入口”。

    B:默认情况下,你会看见一个MainPage.xaml 和 mainPage.xaml.cs文件,它是继承UserControl类而来的。默认情况下App会载入这个界面。

    应用程序包必须包含一个程序集,该程序集具有从 Application 派生的类。Application 类封装您的应用程序和 Silverlight 插件之间的交互。例如,它允许您在宿主网页内显示用户界面。此外,它提供应用程序生存期事件和资源管理。

    然后是另一个项目位于Silverlight Application 项目的下面。那是一个传统的Web Application的项目。在这个项目下我标识了C。

    C:是自动产生并用于承载Silverlight应用程序的,你可以设置任意其中的一个为起始页面。

    ClientBin: 你还可以看见一个ClientBin文件夹,Silverlight生成的下载程序包(.xap)就保存在这里。一旦你将项目生成你将在里面看到Helloworld.xap程序包。

    文件结构就解释到这里。

    程序运行原理

    1.一旦你完成了Silverlight程序,它会生成一个.xap程序包并把这个文件包放入到ClientBin文件下。但在复杂的情况下,你不仅可以看到.xap程序包,还会看到一些.zip的压缩文件也反正这里。这些文件包和压缩包将被下载到客户端。

    2.当用户请求承载Silverlight的页面如HelloworldTest.aspx页面的时候,程序包首先会被下载。

    3.一旦程序包下载完成,Silverlight的运行时会加载Silverlight应用程序到应用程序域中。

    4.然后,App.cs会先执行,它会加载Mainpage.xaml并将其显示出来。

    应用程序域:也许很多人对这个概念不是很熟悉,你可以暂时认为它是一个专门运行程序的特定区域。就像人只能生活在地球上一样,但如果你想到月球去也可以,请穿上太空服。这里的应用程序域有点类似于太空服。

    Silverlight 全系列 - 体系结构

    其实很犹豫是否应该讲讲Silverlight的体系结构。一般很多人是不很愿意去看这些理论的东西。不过我想了解一下应该对你的认识和熟悉Silverlight是很有帮助的。虽然在看的时候,也许你会存有疑惑,不过我想我应该会在后面慢慢将其揭开。所以还是决定讲讲。

    概 要

    · 什么是Silverlight?

    · Silverlight和.net framework的关系

    · 简单了解Silverlight平台

    什么是Silverlight

    · 类似Flash的效果在网页中,只是Silverlight很好的和服务器通讯,可以利用Silverlight提供更好的界面体验同时强于Flash。

    · 它是一个典型的运行在“沙箱”中的程序,也就是说它只能有限的访问客户端机器上的资源,但可以提供很好用户体验。

    · 如果要比较只能把它和Flex技术进行比较。为了理解方便我才在前面提及到Flash。

    以上表明了一点,如果我们想运行Silverlight就必须安装它的“插件”,就是 Microsoft Silverlight 3 Developer Runtime。

    当你安装Silverlight SDK 或 Silverlight Tools 3.0 software for VS2008的时候它就会被安装。只有安装了Runtime才能运行Silverlight的应用程序。这个Runtime的安装包中包含:

    1.承载Silverlight应用的程序的插件。

    2.支持运行程序的基础架构。

    Silverlight 和.net framework的关系

    严格意义上,Silverlight是.net frameworkd的子集。Silverlight拥有自己的一套framework,被称为 .net framewor for Silverlight

    虽然这个framework看上去类似于.net framework的架构体系,但实际上他们是不一样的。.net framework for Silverlight 是全新的,但受.net framework 的支持。如果你的机器并没有安装.net framework 包也一样可以运行Silverlight,只要你安装了Microsoft Silverlight 3 Developer Runtime。以下几点要注意:

    · 如果你建立一个基于.net framework的项目,在项目中你可以应用Silverlight的相关程序集包括SDK和runtime。

    · 如果你建立了一个Silverlight的应用程序或类库项目,那么你想在其中引用.net framework中的程序集是不可能的。因为在Silverlight的范围内是不支持.net framework的。

    也就是说,对于.net framework而言,它能支持Silverlight,但对于Silverlight而言它是不支持面向.net framework的开发的。这也就意味着如果你在开发Silverlight的应用程序的话,那么你原有的基于.net framework的东西是无法直接使用的。但在vs2008中可以调整一个类库项目的属性转变当前的.net framework的项目为一个.net framework for Silverlight的项目。

    设置步骤:选中项目文件>右击>点击属性>在属性的“应用程序”中>> 勾选“仅使用客户端框架字集”

    现在我们其实面对了两个.net framework, 一个是传统的一个是面向Silverlight. 虽然他们使用不同的框架在开发,但他们两者有高度的相似度,几乎原来定义在.net framework上基础类在Silverlight的框架中都原封不动的保留下来,包括类的名称,用法等。这样做有一个好,我们只需要引用不同框架下的相应程序集就可以实现从.net framekwork到Silverlight的转变。

    简单了解Silverlight平台

    在开始了解Silverlight平台前,请看看先前章节中提到的xap包。你可以将Hello word application(也许你完成了,如果没有你可以建立一个新的,直接编译就可以了)项目中位于ClientBin文件夹下的HelloWorld.xap复制到任何一个地方,将其后缀名由xap改成zip.然后用工具打开看看所谓的程序包里到底装了写什么东西。如果你做的程序足够简单你会看到两个文件

    AppManifest.xaml 和 HelloWorld.dll文件,这些文件会被下载到客户端,然后被客户端runtime运行。

    这里经历了几个步骤:

    · 获得请求后,Silverlight的xap包及相关的资源会被下载到本地(这个过程是由Silverlight插件触发的)。

    · 在客户端,一旦程序包下载完毕就会将其载入到程序域中执行。

    也就是说,Silverlight的平台是运行在客户端的,并不是像asp.net那样运行在服务器端的。对于Silverlight平台而言,它是由核心表现层框架、.NET Framework for Silverlight 和一个安装程序和更新组件组成。

    如果他运行在客户端平台。那么为什么可以在服务端进行调试那?因为当你在属性—Silverlight调试 选中时。就代表。支持客户端的调试。类似Firebug。所以JS调试就禁用了。

    而且。TOOL集成了运行时(浏览器上的运行环境)。所以可以直接在Silverlight中和运行时进行通信。实现断点调试。

    组件

    说明

    核心表示层框架

    面向 UI 和用户交互的组件和服务(包括用户输入、用于 Web 应用程序的轻量型 UI 控件、媒体播放、数字版权管理和数据绑定)以及表示层功能(包括矢量图形、文本、动画和图像)。此外还包括用于指定布局的可扩展应用程序标记语言 (XAML)。

    .NET Framework for Silverlight

    .NET Framework 中包含组件和库的一个子集,其中包括数据集成、可扩展 Windows 控件、网络、基类库、垃圾回收和公共语言运行时 (CLR)。

    .NET Framework for Silverlight 的某些部分是通过应用程序部署的。这些"Silverlight 库"是未包括在 Silverlight 运行时中但将在 Silverlight SDK 中提供的程序集。在应用程序中使用 Silverlight 库时,它们会与应用程序打包在一起,并下载到浏览器中。这些库包括新的 UI 控件、XLINQ、整合 (RSS/Atom)、XML 序列化和动态语言运行时 (DLR)。

    安装程序和更新程序

    是一个安装和更新控件,可简化用户首次安装该应用程序的过程,以后可提供低影响自动更新。

    我不想从Silverlight Documentation 中copy这个到这里,但怎么能不说明呢?虽然不上面的解释有些不适让人很好理解,然后总比没有一个标准的基础上再做解释来的好的。

    同时我还要copy一幅说明它们的图到这里,不过在做后我会对这一切都一个明白的解释。所以希望你能看完。

    clip_image018

    你可以看到我把上面分割成了三个部分。

    C:表示支持Silverlight 的安装和更新的组件。也可以说C就是我们所说的插件,但不完全是。

    集成网络协议栈:要通过网络通信就需要它。

    DOM 集成:要和浏览器良好沟通就需要它,Silverlight是不可能不和浏览器打交道的。

    应用程序服务:提供如果启动、装载和维持应用程序的必要服务,没有它Silverlight就无法运行。

    安装程序:随着技术升级,相应的Microsoft Silverlight Developer Runtime也会不断更新。它提供了一种智能更新必要组件的方式。

    B:这个部分主要处理图形、呈现、媒体处理及接收输入等方面的处理,它主要和操作系统以及硬件方面的支持打交道。没有它Silverlight是无法帮你提供多样化的视觉听觉及媒体处理方面的效果的。

    BA之间你可以看见是XAML,你可以通过XAML的定义直接访问B中提供的支持(原来传统的概念中,如果我们要去获得类似的支持只能通过.net framework提供的API在访问。但现在你不仅仅可以通过API来用编程的方式来访问还可以通过XAML定义的方式来访问。也就是说在这里你有了两套API可以使用来达到相同的目的。当然XAML不仅仅是只能访问B中的功能而已。几乎是你能用代码实现的用XAML也可以实现。这是很有趣的一点。

    A: 是.net framework for Silverlight 我们觉得比较熟悉的一个部分,它类似于.net framework的体系结构甚至类的名称几乎都是一样的,虽然它是全新的相对于.net framework而言。这里我就不多解释了。

    在A的右边灰色的区域并不属于.net framework for silverlight的一部分,它是为了支持能够在浏览器中通过脚本的方式来开发Silverlight而设计的。

    本人声明: 个人主页:沐海(http://www.cnblogs.com/mahaisong) 以上文章都是经过本人设计实践和阅读其他文档得出。如果需要探讨或指教可以留言或加我QQ!欢迎交流!
  • 相关阅读:
    PAT (Advanced Level) Practice 1055 The World's Richest (25 分) (结构体排序)
    PAT (Advanced Level) Practice 1036 Boys vs Girls (25 分)
    PAT (Advanced Level) Practice 1028 List Sorting (25 分) (自定义排序)
    PAT (Advanced Level) Practice 1035 Password (20 分)
    PAT (Advanced Level) Practice 1019 General Palindromic Number (20 分) (进制转换,回文数)
    PAT (Advanced Level) Practice 1120 Friend Numbers (20 分) (set)
    从零开始吧
    Python GUI编程(TKinter)(简易计算器)
    PAT 基础编程题目集 6-7 统计某类完全平方数 (20 分)
    PAT (Advanced Level) Practice 1152 Google Recruitment (20 分)
  • 原文地址:https://www.cnblogs.com/mahaisong/p/2204084.html
Copyright © 2011-2022 走看看