初步了解一下Silverlight

最近一直在学Silverlight,今天下载了MS提供的SDK,看了一下示例代码。

虽然Silverlight号称要Rich-Client打到Flash,但是其工作机制和Flash相差还是很大的。
Flash的工作方式更像ActiveX控件,或者说就是ActiveX控件,其代码是二进制的(也许不是,但至少是不可读的),由Flash Player控件负责解释。Flash Player更像一个虚拟机来维持Flash运行。

而Silverllight完全可以将源代码放到网站后台上,前台所有的实现都是通过javascript,至于为什么还要下载一个silverlight插件,原因在于silverlight中用到的javascript对象浏览器本身没有提供。

那么Silverlight到底是运行在服务器端还是运行在客户端的呢?Flash可是实实在在运行在客户端的。
Silverlight更像Ajax,是在服务器端和客户端同时运行,期间通过XML传递数据,或者更确切的说,Silverlight是运行在服务器端的,但是因为应用了Javascript+XAML这种特殊的Ajax,使Silverlight可以提供丰富的客户端操作。

那么一个基本的Silverlight到底包括哪些部分呢?
首先,可以既然Silverlight是运行在网页之中,就要有一个HTML文件存在,在<head>部分包含了两个独立的js脚本文件
这两个js脚本分别用于创建silverlight和检查本地是否安装silverlight插件

其中包括Silverlight的部分既不是<embed>也不是<object>,而是<div>,这个<div>由<Head>中的<Style>定义一个样式,而<div>里面是一行简单的Javascript函数调用。这个函数在前面包含的单独js文件中。而函数的功能就是创建silverlight

再来看这个js脚本,它负责使用silverlight专属的对象提取一个XAML文件,并把这个XAML转换成Silverlight。这个XAML文件就如同Flash的SWF文件一样,不过SWF文件既包括资源又包括逻辑,并且是不可读的,而XAML只包括资源和表现形式,不包括程序逻辑,并且是可读的。

每一个XAML文件都对应一个相同文件名+".cs"或者".vb"的服务器端代码。这个和ASPX的CodeBeside很相似。当然我还没有研究这个cs文件是否可以编译后放在这里,按照微软一贯的做法,应该是可以的。

下面看看具体流程

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

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

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

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

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

其实,到底是cs编译好在前台运行还是在后台运行我是不知道的,但是由于silverlight是在.net下开发的,并且运行silverlight的客户机不需要安装.net框架。而且可以跨平台,所以猜测是在服务器端运行的。

以上是我根据相关材料理解成文的,如果有不对的,请高人匡正。
若是转载,请注明出处,谢谢。

posted @ 2008-01-29 13:55 YAOYI 阅读(2410) 评论(32)  编辑 收藏

  回复  引用  查看    
#1楼 2008-01-29 14:48 | dcy      
老大,是你不?N久没你的消息了。。。
  回复  引用  查看    
#2楼 2008-01-29 14:53 | 超少      
弱弱的问个问题,
在线视频是silverlight还是Flash呀?
制做silverlight和制作Flash差不多吧?
  回复  引用  查看    
#3楼 2008-01-29 14:55 | dcy      
在线视频本身跟silverlight和Flash都没有什么关系吧.
  回复  引用    
#4楼 2008-01-29 15:04 | yaoyi [未注册用户]
个人感觉,silverlight的在线视频可能是利用服务器端代码,在把服务器端的视频文件透过一个silverlight展现出来,不确定,因为我还没用过它的在线视频。

而且silverlight目前还不是很稳定,连MS的采用silverlight的下载中心也频频报错。但是这个思路是好的。
  回复  引用  查看    
#5楼 2008-01-29 15:19 | dcy      
老大,我是ducunyi啊,已经把我遗忘了吗?:) 现在上海过得好吗?
  回复  引用  查看    
#6楼 2008-01-29 15:40 | 超少      
@dcy
可是土豆网的视频画面上
鼠标停留就跟在flash上停留一样呀~~~~~

  回复  引用    
#7楼 2008-01-29 16:07 | fjzhou [未注册用户]
视频应该都是Flash。视频的右键菜单有一项是“关于Flash Player”
  回复  引用    
#8楼 2008-01-29 16:36 | 汪江涛 [未注册用户]
我认为SliverLight就是ActiveX,共实Flash也可以用脚本访问,但Flash控件的设计不是很好,与脚本亲和力差很多,基本上不支持Flash影片文档对象的外部脚本访问(不知道最新版本有没有改进)。
  回复  引用  查看    
#9楼 2008-01-29 16:37 | Ariel Y.      
很多概念性错误,稍后再评论
  回复  引用  查看    
#10楼 2008-01-29 16:37 | TT.Net      
SL能不能创占一席之地就看08看咯~
  回复  引用  查看    
#11楼 2008-01-29 17:15 | pengyuan      
我可以很确定的告诉你……cs编译好后是在前台运行的……
你建一个SL1.1的项目使用C#,你会发现,项目能够添加的引用的组件非常少。
而且,这些程序逻辑运行的时候,并没有产生HTTP请求,你可以用工具看一看,比如Fiddler

  回复  引用  查看    
#12楼 2008-01-29 17:20 | 怪怪      
一般我i的风格都是鼓励发文, 不过LZ这篇文章似乎应该从首页撤下, 避免误导新手. 错误太多了.
  回复  引用    
#13楼 2008-01-29 18:47 | GODAA [未注册用户]
错误太多,容易误倒初学者,LZ对Silverlight是初学,而且很可能是刚了解,理论部分没学习.咱先不评价了.
  回复  引用  查看    
#14楼 [楼主]2008-01-29 19:53 | 姚毅      
@pengyuan
我开始只是根据理解说cs代码是在后台运行的。但是我查了一些资料,现在可以说已经可以确定代码是在后台运行的了。因为cs代码的执行引擎基于.net framework,而客户端是不包括.net framework的。
(参见 silverlight架构图:
http://p.blog.csdn.net/images/p_blog_csdn_net/supper800/SL_Map_FinalNET.png


至于程序执行的时候有没有产生http请求,这个应该是和程序本身相关的,如果仅仅是一个表现程序,应该在程序初始化的时候就将所有需要的逻辑下载了。

如果程序需要数据库交互的,怎么可能没有http请求。
  回复  引用    
#15楼 2008-01-29 19:57 | annesammy2 [未注册用户]
好东西~~~
  回复  引用  查看    
#16楼 2008-01-29 20:22 | Ariel Y.      
无语了~~~

这个图中间的两层圈圈就是Silverlight的核心,不是.net的是什么?!

Silverlight 1.0和1.1是不同的,1.1的下载包好像是4MB多,就包含了在客户端运行.net的library,1.0是Javascript在客户端解释运行的,1.1是.cs, .vb在客户端编译运行的。

楼主不要确定了,再仔细研究一下。
  回复  引用  查看    
#17楼 2008-01-29 20:36 | xiao_p      
silverlight 本来就是个activex控件。怎么可能运行在服务器端,肯定是运行在客户端的。
  回复  引用  查看    
#18楼 2008-01-29 20:39 | Ariel Y.      
针对本文的几个错误,这里给新手解释一下,也许我也有不对的地方,还请高人指出!

1、从运行方式上说,其实Flash和Silverlight是基本相同的,都是一个本地的ActiveX控件进行渲染,只不过Flash是二进制的,Silverlight是Xml+资源+Javascript或编译的C#/VB/IronPython/IronRuby。

2、Silverlight怎么可能是在
中渲染?Silverlight是给你提供好一段脚本来输出最终的,就是为了防止现在Flash那个虚框的问题,同时也方便了程序员,那个
只不过是一个放置的容器罢了。

3、根本就不存在“silverlight中用到的javascript对象”这个概念,应该是Javascript操作Silverlight中的对象才对。

4、Silverlight是运行在客户端的,照楼主的逻辑,运行在服务器端的话,向客户端传送的是什么?视频流?
1.0版的是Javascript在客户端运行,1.1(2.0)是在服务器端编译为dll后下载到客户端由Silverlight控件运行。


  回复  引用  查看    
#19楼 2008-01-29 23:13 | wu.qiliang      
看完文章再看评论,晕了,删除最近三分钟的记忆,等下一篇勘误版本
  回复  引用  查看    
#20楼 2008-01-29 23:16 | ocean      
完全错误,我来解释吧:
Silverlight是客户端技术,和服务端没有关系。Silverlight1.0靠JS来实现逻辑,Silverlight2.0可以用C#等.NET语言。

所有的代码都是在浏览器中执行的。也就是客户端执行的。

SL可以和服务器交换数据,这点flash也能做到。但是这不意味着SL是服务段技术。

客户端不需要安装.NET framework,当第一次运行SL时,和Flash相同要下载一个SL运行时,这个运行时包含了一个精简的.NEt framework.

SL和flash确实有很大不同,比如SL通过XAML,而XAML是文本的,能够被搜索引擎搜索到,而flash不能被普通的搜索引擎搜索到,因为flash是二进制的。不过google签署了协议,现在能够搜索到flash内部的内容。但是其它搜索引擎还不行。而SL天生就是搜索引擎友好的。

还有诸多不同,不再表述。
  回复  引用    
#21楼 2008-01-30 01:51 | 古典小说 [未注册用户]
我也糊涂了 努力学习ING
  回复  引用  查看    
#22楼 2008-01-30 08:51 | pengyuan      
图是好图,收藏了~~~
我说过,你新建一个C# silverlight项目会发现能够引用的组件是非常少的,你想进行数据库操作,恐怕不行吧
我所知道的这种读写数据库应用好像是用webservice来完成的。

楼上很多高手都说过了1.1(2.0)是带一个精简的.net framework,这下总明白为什么是在客户端运行了吧
  回复  引用  查看    
#23楼 2008-01-30 09:03 | 普若伽门      
有点意思。
  回复  引用    
#24楼 2008-01-30 09:03 | Everett [未注册用户]
跟Flash比就对了, 都是在客户端运行啊, 怎么出来个在服务器端运行
  回复  引用  查看    
#25楼 2008-01-30 09:12 | aspnetx      
作者的部分观点我个人还是无法认同的
  回复  引用  查看    
#26楼 2008-01-30 09:20 | 破曉之陽      
看客。
  回复  引用    
#27楼 2008-01-30 09:39 | XXOXX [未注册用户]
只是看看這個,沒打算認真去學他,因為在這個方面,我一直承認FLASH是站在最高的位置的
  回复  引用  查看    
#28楼 [楼主]2008-01-30 11:09 | 姚毅      
今天在一个没有.net框架的机器上,没有IIS,只有silverlight1.0插件的机器上运行(本地运行)了一个小的silverlight程序,程序可以正常运行。
证实了上面高手所说的.net可以在纯客户端运行。
但是当我删除了DLL文件和cs文件后,silverlight一样可以运行,说明有的silverlight程序可以无需和服务器交互。但是至少这里的C#代码并没有被真正执行。
也就无法说明到底cs代码编译后是本地运行还是远程运行。

但是试想1.4M的silverlight插件可能包含一个精简的.net framework吗?
若是这样,是不是可以说silverlight完全可以脱离服务器,独立运行,从编译到运行都是在本地完成的?
  回复  引用  查看    
#29楼 2008-01-30 11:47 | 蓝天旭日      
SliverLight就是ActiveX,Flash也可以用脚本访问,但Flash控件的设计不是很好......
  回复  引用  查看    
#30楼 [楼主]2008-01-30 11:48 | 姚毅      
另外说明一点,我参考的SDK是Microsoft Silverlight 1.1 SDK Alpha Refresh Sept 2007.zip
  回复  引用  查看    
#31楼 2008-01-30 13:30 | Ariel Y.      
@姚毅
"也就无法说明到底cs代码编译后是本地运行还是远程运行"我觉得楼主对HTTP协议的理解都有问题。

Silverlight 1.1(2.0)的安装包不是1.4MB,是4MB多。编译好后放在服务器端,客户端运行。至于.cs什么只是源代码而已,你见过发布的Winform程序还有源代码一起给你吗?
  回复  引用  查看    
#32楼 2008-01-30 13:45 | 出走的影子      
不知道作者是怎么学silverlight的,好好读读whitepaper再来写文章吧