Windows Live之Silverlight Streaming学习笔记
Windows Live框架包括了很多内容,其中之一就是Silverlight Streaming,本文是通过对http://dev.live.com/silverlight/和Silverlight Streaming SDK(http://msdn.microsoft.com/en-us/library/bb851621.aspx)学习后整理的笔记,肤浅之极!
Silverlight Streaming的架构图在http://msdn.microsoft.com/en-us/library/cc304461.aspx里有非常详细的介绍,我浅薄的认为它就是为我们提供了一个存放Silverlight应用程序及Media资料(主要是Video)的服务器,然后在我们的站点页面里可以随意引用Silverlight Streaming服务器上的Silverlight应用程序及Media Assets。当然,它不是一个简简单单的仅仅存放文件的服务器,它还会给我们提供一些服务,例如,它为我们包装好了Silverlight在页面如何呈现部分的代码。
要使用Silverlight Streaming,必须首先注册一个Silverlight Streaming账号。而要想注册Silverlight Streaming账号,首先必须用Windows Live ID登录。在http://silverlight.live.com/account/create.aspx 页面用Windows Lieve ID登录后即可注册一个Silverlight Streaming Account。Silverlight Streaming账号是个Windows Live ID相关联且不变的(注意,它们是两个东西而不是一个东西),同时还会生成一个Account Key,这个Key在后面调用API时会有用,有点类似于密码的味道,且这个Key是可以重新生成的。
拥有了Silverlight Streaming账号,就可以简单的理解为在Silverlight Streaming服务器上拥有自己的空间,接下来就可以往Silverlight Streaming上传自己的文件了。可以在"Manage Applications"(https://silverlight.live.com/files.aspx)里上传Silverlight程序,也可以在"Manage Videos"(http://silverlight.live.com/Videos.aspx)里上传视频文件。
上传Silverlight应用程序,当然首先必须准备好Silverlight应用程序并打包成zip文件,同时还用创建一个mainfest.xml放到zip文件里,该mainfest.xml告诉Silverlight Streaming一些相关信息,格式如下:
<source>XAML or XAP file</source>
<version>1.0 | 2.0</version>
<width>[value in browser units or percentage]</width>
<height>[value in browser units or percentage]</height>
<jsOrder>
<js>[js file to load first]</js>
<js>[js file to load second]</js>
<js>
![](/images/dot.gif)
</jsOrder>
</SilverlightApp>
而这些信息都是在Silverlight Streaming封装呈现Silverlight的代码时所必需的。
另外,实际上在Silverlight 2里编译后就已经打包成xap文件了,其实只需要上传这个xap文件即可,Silverlight Streaming会自动生成mainfest.xml配置信息,且可以在页面“Configure this Application”节点进行修改。
当Silverlight上传完毕后,Silverlight会提供给我们如何引用该Silverlight程序的代码。要在别的页面上引用Silverlight Streaming上的Silverlight程序,有两种引用方式,一种是用Ifame,另一种是用Silverlight Streaming Control。
用IFrame的方式例如:
用Silverlight Streaming Control的方式得完成以下几个步骤(从SDK复制而来,实际理解起来很简单):
- Modify the
<html>
tag to reference thedevlive
namespace:<html xmlns:devlive="http://dev.live.com"> - Add the following references to the page header:
<script type="text/javascript" src="http://controls.services.live.com/scripts/base/v0.3/live.js"> </script> <script type="text/javascript" src="http://controls.services.live.com/scripts/base/v0.3/controls.js"> </script> - Add the Silverlight Streaming control to your web page, as shown in the following example. Replace
accountID
with your account identifier, andappName
with the application name:<devlive:slscontrol silverlightVersion="1.0" src="/accountID/appName/" installationMode="popup" initParams="myKey=theValue"> </devlive:slscontrol>
initParams属性来传递参数,例如:
<devlive:slscontrol
silverlightVersion="1.0"
src="/accountID/appName/"
installationMode="popup"
initParams="myKey=theValue">
</devlive:slscontrol>
同时Silverlight Streaming Control还定义了OnLoad、OnInit等事件供调用的Web页面来处理,可以参考http://msdn.microsoft.com/en-us/library/cc304460.aspx。
至于上传Video,相对简单,可以参考http://msdn.microsoft.com/en-us/library/cc645017.aspx。只是这个Video一般要求被Silverlight所支持。
上面所提及的都是通过Silverlight.live.com所提供的页面操作方式来完成的,同时Silverlight Streaming也为我们提供了许多API,使得我们可以在程序里用代码完成上面提及的所有操作。
Silverlight Streaming API是基于WebDav(有关WebDAV的知识可以参考http://www.webdav.org/),我们可以通过HttpWebRequest与Silverlight Streaming服务器交互,从而完成鉴权、获取应用程序/文件信息、修改应用程序/文件信息和删除应用程序/文件的操作。
所谓鉴权,是通过Silverlight Streaming Account和Key来判断这个账号是否是一个合法的Silverlight Streaming账号。SDK里已经为我们提供了一段鉴权的代码,我稍作修改:
using System;
using System.Net;
using System.IO;
namespace SilverlightServicesApi
{
class Program
{
static void Main(string[] args)
{
string accountId = "78012"; //Account
string accountsecret = "6cb0458d482d7348b4a50ddda4bf4352"; //Account Key
HttpWebRequest req =
(HttpWebRequest)HttpWebRequest.Create
("https://silverlight.services.live.com/" + accountId );
byte[] userPass = Encoding.Default.GetBytes(accountId + ":" + accountsecret);
string basic = "Basic " + Convert.ToBase64String(userPass);
req.Headers["Authorization"] = basic;
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream strm = resp.GetResponseStream();
StreamReader rdr = new StreamReader(strm);
string xmlResponse = rdr.ReadToEnd();
}
}
}
如果鉴权成功,response就会接收到该Account下的所有Silverlight Applications列表信息,是以XML的方式返回的。
至于上传文件、修改文件、获取文件及删除文件是通过HTTP的Post、Put、Get及Delete方法实现的。在http://msdn.microsoft.com/en-us/library/cc304456.aspx上有详细描述。同时,SDK给我们提供了一个非常不错的Silverlight Streaming API Sample,可以在http://dev.live.com/silverlight/downloads/WebDAV_Clientdemo_CS.zip下载。
=======================================================================
野文(Jasson Qian)
------------------------------------------------------
博客园:http://qguohog.cnblogs.com
CSDN:http://blog.csdn.net/sallay