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一些相关信息,格式如下:

<SilverlightApp>
   
<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></js>
   
</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的方式例如:    

<iframe src="http://silverlight.services.live.com/invoke/32/SlLogo/iframe.html" frameborder="0" width="258" height="100" scrolling="no"></iframe>

 

    用Silverlight Streaming Control的方式得完成以下几个步骤(从SDK复制而来,实际理解起来很简单):

  1. Modify the <html> tag to reference the devlive namespace:
    <html xmlns:devlive="http://dev.live.com">
    
    
  2. 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>
    
    
  3. Add the Silverlight Streaming control to your web page, as shown in the following example. Replace accountID with your account identifier, and appName with the application name:
    <devlive:slscontrol silverlightVersion="1.0" src="/accountID/appName/" installationMode="popup" initParams="myKey=theValue"> </devlive:slscontrol>
    
    
    从这里可以看到,我们在页面上放Silverlight程序不需要用<Object>标签了,因为这一切Silverlight Streaming已经为我们做好了。但从另一方面来看,由于页面上引用的Silverlight程序放在Silverlight Streaming服务器上,如果在我们的页面需要向Silverlight传递参数,那就涉及到跨域的问题了。要解决这个问题,我们只有使用Silverlight Streaming Control 的方式,在Control里可以设置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下载。
 
posted on 2009-02-26 11:16  野文  阅读(997)  评论(0编辑  收藏  举报