Silverlight:丰富浏览器的Web服务客户端

日期: 2008-02-18 作者:Daniel Rubio翻译:Crital 来源:TechTarget中国 英文

在企业中,Web服务数据可以在不同的层面中获得,包括从用户桌面的到组成大部分SOA信条的服务器端的应用。但是每一层都有一些特性,影响着数据使用的方式以及用来解决特定商业问题的方式。在下面的文章中,我们将探究在层之间的一种特定的最近特别流行的传送方式:浏览器以及Silverlight用以提高这个特殊Web服务客户端所遵从的方式。   最近企业中对浏览器的关注主要在Ajax。

它允许浏览器异步访问数据,改进了基于Web的应用程序常见的缓慢、无反应的问题。不过这个最新动态有趣的是,Ajax的数据传输特性与XML或JSON紧密相连。XML代表Ajax缩写词中的X,JSON是基于JavaScript的记数……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

在企业中,Web服务数据可以在不同的层面中获得,包括从用户桌面的到组成大部分SOA信条的服务器端的应用。但是每一层都有一些特性,影响着数据使用的方式以及用来解决特定商业问题的方式。在下面的文章中,我们将探究在层之间的一种特定的最近特别流行的传送方式:浏览器以及Silverlight用以提高这个特殊Web服务客户端所遵从的方式。

  最近企业中对浏览器的关注主要在Ajax。它允许浏览器异步访问数据,改进了基于Web的应用程序常见的缓慢、无反应的问题。不过这个最新动态有趣的是,Ajax的数据传输特性与XML或JSON紧密相连。XML代表Ajax缩写词中的X,JSON是基于JavaScript的记数法,两者都是基于文本的有效载荷并且在任何浏览器中都能以默认的形式解析。

  后者的格式本质上都没有什么错,只是浏览器典型的组成让这些基于文本的有效载荷运行方式具有局限性。Silverlight由此应运而生,它是一个浏览器插件,旨在丰富能够在浏览器环境中解析和执行的数据类型。当然,如果你有一定的Web设计经验,就知道有很多插件程序可用于丰富数据类型,例如Flash和Java。不过,在下面我们将会探讨该插件的新特点,希望不会让你失望。

  可能有所争议的是,Silverlight首先继承的优点并不是它的技术特点,而是它来自在浏览器市场占最大市场份额的微软IE。有关浏览器的争论差不多已经结束,一些开发人员痛恨与技术无关的问题,所以,具有读取自动或者紧急更新补丁的能力,将类似的插件安装在大多数用户使用的浏览器中是一个很强大的过程。这样,能够打破平衡,从而有利于某些技术得以快速的开发。所以,现在由Flash和Java浏览器插件引发的争论快速地为类似Silverlight的后来新兴者铺垫了道路,为其开发者带来好处。

  在技术方面,Silverlight将XAML (eXtensible Application Markup Language)引进浏览器。正如其名字所示,XAML是一种标记语言,比浏览器中传统HTML标记语言提供更丰富的元素集合,能够完成从2-D动画、向量图形、高保真音频到视频控制等任务。它具有一个新的混合特征包,使得应用程序开发者能基于此工作。图1.1示例了由XAML结构支持,对Silverlight的应用。

  图1.1  Silverlight 屏幕截图
 
  上面的图像显示的一个内嵌电影,采用四种颜色来控制行为。它采用的XAML 结构详见列表1.1。

  列表1.1 Silverlight XAML布局

  <!-- Source : Silverlight website quickstart  -->
  <Canvas Width="300" Height="300"
   >http://schemas.microsoft.com/client/2007"
   >http://schemas.microsoft.com/winfx/2006/xaml"
   Loaded="canvas_loaded">
   
  <MediaElement x_Name="media"
     Source="thebutterfly.wmv"
     Width="300" Height="300" />

  <Canvas x_Name="buttonPanel">
 
    <!-- Stops media playback.-->   
    <Canvas MouseLeftButtonDown="media_stop"
       Canvas.Left="10" Canvas.Top="265">
      <Rectangle Stroke="Black"
         Height="30" Width="55" RadiusX="5" RadiusY="5">
        <Rectangle.Fill>
          <RadialGradientBrush GradientOrigin="0.75,0.25">
            <GradientStop Color="Orange" Offset="0.0" />
            <GradientStop Color="Red" Offset="1.0" />       
          </RadialGradientBrush>
        </Rectangle.Fill>      
      </Rectangle>
      <TextBlock Canvas.Left="5" Canvas.Top="5">stop</TextBlock>
    </Canvas>
 
    <!-- Pauses media playback. -->
    <Canvas MouseLeftButtonDown="media_pause"
       Canvas.Left="70" Canvas.Top="265">
      <Rectangle Stroke="Black"
         Height="30" Width="55" RadiusX="5" RadiusY="5">
        <Rectangle.Fill>
          <RadialGradientBrush GradientOrigin="0.75,0.25">
            <GradientStop Color="Yellow" Offset="0.0" />
            <GradientStop Color="Orange" Offset="1.0" />       
          </RadialGradientBrush>
        </Rectangle.Fill>      
      </Rectangle>
      <TextBlock Canvas.Left="5" Canvas.Top="5">pause</TextBlock>
    </Canvas>
 
    <!-- Begins media playback. -->
    <Canvas MouseLeftButtonDown="media_begin"
       Canvas.Left="130" Canvas.Top="265">
      <Rectangle Stroke="Black" RadiusX="5" RadiusY="5"
         Height="30" Width="55">
        <Rectangle.Fill>
          <RadialGradientBrush GradientOrigin="0.75,0.25">
            <GradientStop Color="LimeGreen" Offset="0.0" />
            <GradientStop Color="Green" Offset="1.0" />       
          </RadialGradientBrush>
        </Rectangle.Fill>
      </Rectangle>
      <TextBlock Canvas.Left="5" Canvas.Top="5">play</TextBlock>
    </Canvas>
 
    <!-- Switches to full screen mode. -->
    <Canvas MouseLeftButtonDown="toggle_fullScreen"
      Canvas.Left="190" Canvas.Top="265">
      <Rectangle Stroke="Black" RadiusX="5" RadiusY="5"
         Height="30" Width="85">
        <Rectangle.Fill>
          <RadialGradientBrush GradientOrigin="0.75,0.25">
            <GradientStop Color="Gray" Offset="0.0" />
            <GradientStop Color="Black" Offset="1.0" />       
          </RadialGradientBrush>
        </Rectangle.Fill>
      </Rectangle>
      <TextBlock Canvas.Left="5" Canvas.Top="5"
        Foreground="White" >full screen</TextBlock>
    </Canvas> 
 
  </Canvas>
    
</Canvas>

  特别留意那些定义从电影源到控制布局的标记标签(markup tags)的广泛使用。另外,XAML也与JavaScript结合使用来检测应用程序中用户的行为。列表1.2列出了这个代码。

  列表1.2 与Silverlight连接的JavaScript功能

  // Source : Silverlight website quickstart
  function media_stop(sender, args) {

    sender.findName("media").stop();
  }

  function media_pause(sender, args) {
   
    sender.findName("media").pause();
  }

  function media_begin(sender, args) {
   
    sender.findName("media").play();
  }

  function canvas_loaded(sender, args)
  {
 
    var plugin = sender.getHost();
    plugin.content.onfullScreenChange = onFullScreenChanged;
   
  }

  function toggle_fullScreen(sender, args)
  {
    var silverlightPlugin = sender.getHost();
    silverlightPlugin.content.fullScreen = !  silverlightPlugin.content.fullScreen; 
  
  }

  function onFullScreenChanged(sender, args)
  {
    var silverlightPlugin = sender.getHost();
    var buttonPanel = sender.findName("buttonPanel");
   
    if (silverlightPlugin.content.fullScreen == true)
    {
      buttonPanel.opacity = 0;
    }
    else
    {
      buttonPanel.opacity = 1;
    }
   
    var mediaPlayer = sender.findName("media");
    mediaPlayer.width = silverlightPlugin.content.actualWidth;
    mediaPlayer.height = silverlightPlugin.content.actualHeight;
    
  }

  除了和XAML元素相关联,这些JavaScript功能真正特别之处在于被称之为行为性的Silverlight功能(behavior Silverlight functions)。在本例中,是指扩展电影的布局使其全屏显示,进行播放、停止和暂停。这是一个非常基本的示例,但它说明了通过使用Silverlight,更为丰富的行为是如何直接被嵌入基于Web的应用中。

  另外,也证明了XAML比当前丰富的Web应用语言具有更广的视野,它也是WPF (Windows Presentation Foundation)的基础所在。WPF是一种通过微软生产线建立的桌面应用采用的新一代技术,Silverlight将被逐步采用其中,因为XAML可以同样运用于桌面和浏览器。

  在Web服务领域,Silverlight 也紧紧地和WCF (Windows Communication Foundation)相结合,具体而言,是和它的子集之一结合来处理REST Web服务设计。
从这个意义上来说,Silverlight不仅能够运行和控制与Ajax服务请求及XAML标记相关的典型有效载荷(XML和JSON),还能够提供调用位于服务器端层次DLL的服务,就像你用其他的.NET应用程序也能实现的一样。不过在这种浏览器环境的情况下,一些类似远程的机制用于Flash和Java applets中。

  虽然Silverlight想努力进入已经被其他公司占用、非微软专有的丰富Web应用市场还为时太早,但是它在广泛使用的.NET平台环境中占有的位置却会带来有趣的转变。回顾围绕解决服务的微软产品线推出的WCF、BizTalk服务器和其他产品取得的强大市场,就不能够低估Silverlight的未来。你的Web服务最终将与浏览器密切相连的应用程序所充斥,Silverlight可能证明在为你的终端用户提供更多信息方面能够发挥一个重要的作用。

  作者简介:Daniel Rubio,软件咨询顾问,具有十多年企业软件开发经验,最近创办了Mashup Soft公司,专注与Web服务mashup的使用。Daniel Rubio热爱与软件平台相关的所有技术领域,相关话题的探讨可以访问他的博客:www.webforefront.com

相关推荐