zoukankan      html  css  js  c++  java
  • Silverlight 3 OOB 原理

    Silverlight 3 OOB 名词解释 OOB (Out of Browser): Silverlight 3新特性之一。在浏览器中运行的Web应用界面与传统桌面软件比起来总是死板,不够灵活的。因此,人们就产生了需求,想在浏览器之外运行web应用。Adobe的Air可以实现这个功能,而Google的解决方案是Chrome里的shortcuts。给Web应用建立了shortcuts之后,就可以
      

    Silverlight 3 OOB

    名词解释

    OOB (Out of Browser): Silverlight 3新特性之一。在浏览器中运行的Web应用界面与传统桌面软件比起来总是死板,不够灵活的。因此,人们就产生了需求,想在浏览器之外运行web应用。Adobe的Air可以实现这个功能,而Google的解决方案是Chrome里的shortcuts。给Web应用建立了shortcuts之后,就可以按照人们习惯的方式启动这个应用,而界面也很传统软件非常接近了。微软的解决方案则是Mesh,或者最新的Silverlight OOB功能。

    原理简析

    分离程序

    当用户第一次浏览应用程序可能是在浏览器的某个位置。当你的程序支持out-of-browser(OOB)体验时,用户可以通过引起事件分离程序。接着会出现下面的情况:

    detach

    该动作捕获浏览器(例子中虚拟地址 http://foo.com/mysloob.xap)并创建一个OOB程序。

    • 程序(XAP)需要再一次通过浏览器请求数据。
    • 当XAP下载时,在低信任区域中取得本地存储的元数据,包括XAP的原始URI元数据以及重要的ETag信息(本质上是时间戳)。

    首次运行OOB

    如果我们关闭程序并再次在桌面上运行程序:

    launch1

    在这种情况下程序会检查它的元数据XAP的原始URI并进行一次请求。对比HTTP的响应数据(代码以及Etag)。如果程序没有更新,程序会正常运行。事实上,程序的检查请求基本上会是这样:

    1. GET /silverlight/oob/ClientBin/OutOfBrowser.xap HTTP/1.1
    2. If-Modified-Since: Thu, 19 Mar 2009 03:52:35 GMT
    3. User-Agent: Silverlight
    4. Host: timheuer.com
    5. X-P2P-PeerDist: Version=1.0
    6. Accept-Encoding: peerdist
    7.  
    8.  
    9. HTTP/1.1 304 Not Modified
    10. Last-Modified: Thu, 19 Mar 2009 03:52:15 GMT
    11. Accept-Ranges: bytes
    12. ETag: "f2e3a81746a8c91:445"
    13. X-Powered-By: ASP.NET
    14. Date: Thu, 19 Mar 2009 03:55:18 GMT

    需要注意的是HTTP 304 Not Modified的响应。没有更新信息发送时我们可以看到没有传递信息。程序不会发生变化。在API层,作用于改变DetachedUpdatesAvailable状态的Application.Current.ExecutionState没有被触发。

    用户从桌面运行,程序升级

    现在我们更新程序并上传到服务器。用户下一次运行程序时,同样的请求出现:

    launch2

    再一次,请求发送元数据信息。不过这次,有更新了。过程也是加倍的。连同响应发送了新时间戳/ETag,请求同样包括了更新程序。请求会是这样的:

    1. GET /silverlight/oob/ClientBin/OutOfBrowser.xap HTTP/1.1
    2. If-Modified-Since: Thu, 19 Mar 2009 03:52:35 GMT
    3. User-Agent: Silverlight
    4. Host: timheuer.com
    5. X-P2P-PeerDist: Version=1.0
    6. Accept-Encoding: peerdist
    7.  
    8.  
    9. HTTP/1.1 200 OK
    10. Content-Length: 15557
    11. Content-Type: application/x-silverlight-app
    12. Last-Modified: Thu, 19 Mar 2009 03:56:29 GMT
    13. Accept-Ranges: bytes
    14. ETag: "ce39d0ae46a8c91:445"
    15. X-Powered-By: ASP.NET
    16. Date: Thu, 19 Mar 2009 03:56:45 GMT  17: <data>

    “data”之上的部分事实上是更新XAP的数据(注意Content-Length与Content-Type headers)。

    • Application.Current.ExecutionState改变为DetachedUpdatesAvailable 状态。
    • 本地存储的XAP更新了数据。

    当前还没有选项可以拒绝更新数据。如果程序已更新,用户就会获得它们。这是开发团队考虑到不同使用环境的设定。同样的,不能强制用户关闭程序或者阻止程序继续使用。在某种意义上,你或许可以通过更新程序使下次运行时屏蔽UI。再次运行程序(从本地机器)会进行数据更新,更新请求会跟首次相近:

    1. GET /silverlight/oob/ClientBin/OutOfBrowser.xap HTTP/1.1
    2. If-Modified-Since: Thu, 19 Mar 2009 03:56:49 GMT
    3. User-Agent: Silverlight
    4. Host: timheuer.com
    5. X-P2P-PeerDist: Version=1.0
    6. Accept-Encoding: peerdist
    7.  
    8.  
    9. HTTP/1.1 304 Not Modified
    10. Last-Modified: Thu, 19 Mar 2009 03:56:29 GMT
    11. Accept-Ranges: bytes
    12. ETag: "ce39d0ae46a8c91:445"
    13. X-Powered-By: ASP.NET
    14. Date: Thu, 19 Mar 2009 03:57:12 GMT

    上述是Silverlight 3 OOB的基本原理。当程序被分离,与app相关元数据被存储。每一次运行时检查一次元数据,确认升级是否可用。如果程序离线,也不会阻止程序运行。这与部署.NET Framework的ClickOnce观念类似。

    Powered By D&J (URL:http://www.cnblogs.com/Areas/)
  • 相关阅读:
    单元測试和白盒測试相关总结
    数据结构:图的实现--邻接矩阵
    Android提示版本号更新操作流程
    《集体智慧编程》代码勘误:第六章
    LINUX设备驱动程序笔记(三)字符设备驱动程序
    数学定理证明机械化的中国学派(II)
    《Java并发编程实战》第三章 对象的共享 读书笔记
    Linux系列-安装经常使用软件
    Kubuntu 初始配置
    虚拟互换(virtual swap)
  • 原文地址:https://www.cnblogs.com/Areas/p/2154592.html
Copyright © 2011-2022 走看看