Silverlight 3 OOB 原理
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)体验时,用户可以通过引起事件分离程序。接着会出现下面的情况:
该动作捕获浏览器(例子中虚拟地址 http://foo.com/mysloob.xap)并创建一个OOB程序。
- 程序(XAP)需要再一次通过浏览器请求数据。
- 当XAP下载时,在低信任区域中取得本地存储的元数据,包括XAP的原始URI元数据以及重要的ETag信息(本质上是时间戳)。
首次运行OOB
如果我们关闭程序并再次在桌面上运行程序:
在这种情况下程序会检查它的元数据XAP的原始URI并进行一次请求。对比HTTP的响应数据(代码以及Etag)。如果程序没有更新,程序会正常运行。事实上,程序的检查请求基本上会是这样:
- GET /silverlight/oob/ClientBin/OutOfBrowser.xap HTTP/1.1
- If-Modified-Since: Thu, 19 Mar 2009 03:52:35 GMT
- User-Agent: Silverlight
- Host: timheuer.com
- X-P2P-PeerDist: Version=1.0
- Accept-Encoding: peerdist
- HTTP/1.1 304 Not Modified
- Last-Modified: Thu, 19 Mar 2009 03:52:15 GMT
- Accept-Ranges: bytes
- ETag: "f2e3a81746a8c91:445"
- X-Powered-By: ASP.NET
- Date: Thu, 19 Mar 2009 03:55:18 GMT
需要注意的是HTTP 304 Not Modified的响应。没有更新信息发送时我们可以看到没有传递信息。程序不会发生变化。在API层,作用于改变DetachedUpdatesAvailable状态的Application.Current.ExecutionState没有被触发。
用户从桌面运行,程序升级
现在我们更新程序并上传到服务器。用户下一次运行程序时,同样的请求出现:
再一次,请求发送元数据信息。不过这次,有更新了。过程也是加倍的。连同响应发送了新时间戳/ETag,请求同样包括了更新程序。请求会是这样的:
- GET /silverlight/oob/ClientBin/OutOfBrowser.xap HTTP/1.1
- If-Modified-Since: Thu, 19 Mar 2009 03:52:35 GMT
- User-Agent: Silverlight
- Host: timheuer.com
- X-P2P-PeerDist: Version=1.0
- Accept-Encoding: peerdist
- HTTP/1.1 200 OK
- Content-Length: 15557
- Content-Type: application/x-silverlight-app
- Last-Modified: Thu, 19 Mar 2009 03:56:29 GMT
- Accept-Ranges: bytes
- ETag: "ce39d0ae46a8c91:445"
- X-Powered-By: ASP.NET
- Date: Thu, 19 Mar 2009 03:56:45 GMT 17: <data>
“data”之上的部分事实上是更新XAP的数据(注意Content-Length与Content-Type headers)。
- Application.Current.ExecutionState改变为DetachedUpdatesAvailable 状态。
- 本地存储的XAP更新了数据。
当前还没有选项可以拒绝更新数据。如果程序已更新,用户就会获得它们。这是开发团队考虑到不同使用环境的设定。同样的,不能强制用户关闭程序或者阻止程序继续使用。在某种意义上,你或许可以通过更新程序使下次运行时屏蔽UI。再次运行程序(从本地机器)会进行数据更新,更新请求会跟首次相近:
- GET /silverlight/oob/ClientBin/OutOfBrowser.xap HTTP/1.1
- If-Modified-Since: Thu, 19 Mar 2009 03:56:49 GMT
- User-Agent: Silverlight
- Host: timheuer.com
- X-P2P-PeerDist: Version=1.0
- Accept-Encoding: peerdist
- HTTP/1.1 304 Not Modified
- Last-Modified: Thu, 19 Mar 2009 03:56:29 GMT
- Accept-Ranges: bytes
- ETag: "ce39d0ae46a8c91:445"
- X-Powered-By: ASP.NET
- Date: Thu, 19 Mar 2009 03:57:12 GMT
上述是Silverlight 3 OOB的基本原理。当程序被分离,与app相关元数据被存储。每一次运行时检查一次元数据,确认升级是否可用。如果程序离线,也不会阻止程序运行。这与部署.NET Framework的ClickOnce观念类似。
转载于:https://www.cnblogs.com/Areas/archive/2011/08/26/2154592.html
Silverlight 3 OOB 原理相关推荐
- Silverlight的OOB特性
Out Of Brower 传输层协议使用带外数据(out-of-band,OOB)来发送一些重要的数据,如果通信一方有重要的数据需要通知对方时,协议能够将这些数据快速地发送到对方.为了发送这些数据, ...
- Silverlight实例教程 - Out of Browser开篇
众所周知,学习一门IT技术,最关键的是实践,无论是软件开发还是网络调试,只要在真实环境下勤于动手和思考,很快就能掌握一门技术,Silverlight也不例外.为了帮助更多朋友快速学习掌握Silverl ...
- 分享Silverlight/WPF/Windows Phone一周学习导读(06月13日-06月18日)
分享Silverlight/WPF/Windows Phone一周学习导读 本周Silverlight学习资源更新: 小D学blend-----优美简洁的mp3播放器 D调の幸福 Silverligh ...
- 分享Silverlight/WPF/Windows Phone一周学习导读(1月17日-1月23日)
上周微软Silverlight团队发布"微软发布Silverlight Native Extensions 1.0 - 扩展OOB应用功能",对于Silverlight开发人员而言 ...
- 分享Silverlight/WPF/Windows Phone一周学习导读(10月16日-10月22日)
分享Silverlight/WPF/Windows Phone一周学习导读(10月16日-10月22日) 本周Silverlight学习资源更新 Silverlight:分包下载及SEO优化方案 菩提 ...
- Silverlight - Out of Browser配置,安装和卸载
Silverlight 实例教程索引 Silverlight 实例教程 - Out of Browser开篇 Silverlight 实例教程 - Out of Browser配置,安装和卸载 Sil ...
- 一起谈.NET技术,Silverlight实例教程 - Out of Browser的Debug和Notifications窗口
Silverlight 实例教程索引 Silverlight 实例教程 - Out of Browser开篇 Silverlight 实例教程 - Out of Browser配置,安装和卸载 Sil ...
- Silverlight Com组件支持全解析
从4月份Mix 10大会微软发布 Silverlight 4 至今,SL的第四个4版本的推出已经历时半年之久, 昨日在SBlakeMore.Com上看到一组关于采用Silverlight Com组件实 ...
- Silverlight实例教程 - Out of Browser的Debug和Notifications窗口
熟悉Silverlight的朋友应该知道,Silverlight从1.0版本到现在的4.0版本,其功能性越来越强大,从下图我们可以看出,Silverlight的应用模型的一个转变过程,从Javascr ...
最新文章
- python【蓝桥杯vip练习题库】ALGO-140 P1101(提货单)
- 编程软件python怎样开始学-Python 3.7从零开始学
- 从单体应用到微服务架构演化
- session过期设置
- JSON序列化(stringify)对象时排除某些属性的两种方法
- 游戏中的整容术! 《Honey Select》捏人系统剖析
- Django基础必备三件套: HttpResponse render redirect
- JavaWeb知识总结
- fedora nginx php,在fedora16下安裝nginx + php-fpm
- libiconv安装
- 2020-10-13 Comsol学习1
- ps里文字变形、、、
- 环境工程学(整理知识点)
- 阿里云域名的注册到使用流程
- DLP Lightcrafter™ 4500 EVM常见问题答疑
- Gsensor驱动调试
- 【Educational Codeforces Round 61 (Rated for Div. 2) D.Stressful Training】二分
- 计算机考试综合模块怎么做,《综合素质》几大模块备考指导要知道!
- L.G.Hassebrook团队结构光论文记录
- 集成百度ORC 识别报 Fatal signal 11 (SIGSEGV) (RenderThread) 错误(已解决)
热门文章
- NVIDIA DLI 深度学习培训 | 北京 上海两站新年火热来袭
- php 5 windows,PHP 5.5 正式版发布,不再支持 Windows XP
- echarts 三环圆环_echarts实现环形进度图
- linux里面vim自动显示行号,linux中vim永久显示行号、开启语法高亮
- mysql 插入 point_mysq Point类型 查询和插入操作:insert和select
- 浪潮服务器 虚拟光驱,使用IPMI功能远程安装Windows Server 2003操作系统步骤
- ap心理可以用计算机吗,AP考试哪些科目需要使用计算器
- ESXI忘记密码怎么办
- 切换图片 ImageSwitcher
- querydsl动态 sql_Spring data jpa 复杂动态查询方式总结