Silverlight 应用整合

  • 李玮

2011 年 4 月 27 日

话题:Java.NETRuby语言 & 开发

Silverlight 与企业信息化

在企业应用系统中,企业客户不在满足于呆板的 Portal、树形结构、数据堆积的表格和满屏的文字描述。企业客户越来越倡导用户体验,Silverlight 迎合了这种需求,实现了炫目的体验和丰富交互的应用,更重要的是 Silverlight 更适合企业应用系统的开发,依靠.Net 平台,使用 C# 高级语言代替 JavaScript 脚本语言,实现了强大的客户端计算能力、支持多线程,丰富的控件、特效与动画,更可控的浏览器适应性,更安全的沙箱模式,客户端嵌入式数据库等。

现在企业应用开发有两大阵营,一个是 Java,另一个是.NET 平台,难道 Silverlight 只能服务于后者吗?答案:不是。Silverlight 定位于,可以快速部署到浏览器中的富互联网应用。Silverlight 将要覆盖的领域是“客户端应用程序”和“媒体体验”。Silverlight 是为连接到主机的网页内容而设计的,其特点是不但用户可深入地参与到交互中,而且应用还可在任何浏览器中运行。

图 1 Silverlight 各组件之间的关系

“Silverlight 应用”运行于浏览器中的“XAP 文件”本身需要使用 Microsoft Visual Studio 工具开发,就像“Flash 应用”运行于浏览器中的“SWF 文件”需要使用 AdobeFlex 工具开发一样。“Silverlight 应用”可以和“Flash 应用”一样嵌入到已有的网页中运行,“应用本身”需要数据时再去向后端服务器通讯,例如:“Flash 应用”经常使用的从服务器下载“XML 数据文件”后再显示于应用中的通讯方案。

Silverlight 应用通信原型

Silverlight 内嵌在 HTML 网页中,自然就包含在 web 浏览器的沙箱内。非常重要的一点是,在 Silverlight 运行的客户端机器并不需要安装.NET。运行 Silverlight 应用所需的必要资源全都包含在 Silverlight 浏览器插件中,所有互操作场景都建立在 Silverlight 之上。Silverlight 应用的最终生的 XAP 文件,在被用户下载到本地后所有通信任务都是由前端的 Silverlight 应用通过网络访问后端 Server 的数据,以回传绑定显示在 UI 之上。Silverlight 支持广泛的网络能力如:REST、SOAP、POX,RSS 及标准 HTTP 服务等网络技术的调用,这部分对前端的 Silverlight 特别重要。下面所示是通信原型:

图 2 Silverlight 通信原型

前端的 Silverlight 通过网络访问后端服务器的数据,并以在 UI 之上绑定显示回传数据的过程分为以下步骤:

  1. 内嵌在 HTML 网页中 Silverlight 应用发起请求或回传数据。
  2. 客户端内存中的“请求”或“数据”被序列化为可传输的字符串,并发送到服务器。
  3. 服务器接收并反序列化传输的字符串为请求或数据到服务端内存中处理。

Silverlight 通信技术

Silverlight 提供了丰富的与服务器端通信能力,目前 Silverlight 支持 TCP、UDP、Socket 等网络协议,以及 HttpHandler、WebServices 等多种应用层协议,还可以通过 WCF RIA Service 数据“透明”访问方式(通过向客户端公开数据访问层,屏蔽了通信层手工编码)快速实现实体通信。下面所示为可用于 Silverlight 的通信技术:

图 3 用于 Silverlight 的通信技术

Silverlight 运行时支持若干将网络应用程序与远程主机进行连接的主要方法:

序号

命名空间

用途

1

System.Net

WebClient

HTTP

这些类使用 HTTP 或 HTTPS 协议来进行网络通信

2

System.Net.Sockets

套接字

这些类提供一个低级别的套接字接口,该接口可用于更常规的使用单播的网络通信

3

System.Net.Sockets

UdpAnySourceMulticastClient UdpSingleSourceMulticastClient

这些类为 UDP 多路广播客户端提供支持

Silverlight 运行时直接支持的连接方法,都可用于非.Net 平台的技术平台如:JAVA 和 PHP 等。

数据或命令要正常交换要具备两个必要条件:渠道和通用语义。这里的渠道就是与远程主机的连接方法,这里的通用语义指的就是:“序列化与反序列化”。当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以可保持或传输的格式在网络上传送。把对象转换为可保持或传输的格式的过程称为对象的序列化。把可保持或传输的格式恢复为对象的过程称为对象的反序列化。

序号

类型

通途

1

二进制序列化

保持类型保真度,这对于在应用程序的不同调用之间保留对象的状态很有用例如,通过将对象序列化到剪贴板,可在不同的应用程序之间共享对象。

2

XML 序列化

不保持类型保真度,当您要提供或使用数据而不限制使用该数据的应用程序时。

3

JSON 序列化

不保持类型保真度,一种通用的数据格式,有着存储体积小的特点。

Silverlight 应用整合

在原有应用集成方面,如果服务器端使用.Net 平台,那么 Silverlight 客户端程序可以重用原有通信方式,而不必对服务器端程序有较大改动,如果服务器端使用 Java 平台,Silverlight 也提供标准 WebServices、Http、Socket 多种交互方式进行通信,服务器端只要进行简单的服务封装就可以实现与 Silverlight 客户端的数据通信。因此,Silverlight 基于.Net 提供了快速与服务器端程序集成的能力。事实上,在笔者所开发的项目中,已经实现了 Silverlight 客户端与.Net、J2EE(通过 REST 接口)、Tuxedo(通过 SALT 接口)的数据通信。

图 4 原有应用集成

因此,Silverlight 基于.Net 提供了快速与服务器端语言集成的能力。事实上,在笔者所开发的项目中,已经实现了 Silverlight 客户端与.Net、J2EE(通过 REST 接口)、Tuxedo(通过 SALT 接口)的数据连通性。

Silverlight 以前对于支持网络的插件的设计将连接性限制到主机或源站点。这意味着,Web 应用程序只能向后与其部署服务器通信,因此,网络应用程序可以连接到从中下载它们的主机。Silverlight 2 和更高版本包括对跨域连接的支持,这使得应用程序可以访问并非源站点的其他位置中的资源。这是一个重要的功能,它使 Silverlight 应用程序可以使用 Web 上的现有服务。

结束语

企业客户越来越认识到 RIA 技术对于企业应用的重要性,而 Silverlight 就是实现企业应用 RIA 重要的选择之一。Silverlight 定位于“客户端应用程序”,无论是互联网应用中,还是企业应用中,都可以为使用者带来的愉悦感和价值感。在 Silverlight 的数据与通信的中,除了通信渠道与序列化的问题外,最值得注意的两点:异步模式与同步模式的区别、不同开发平台的数据类型匹配问题。

关于作者

李玮,东南融通公司架构师,负责 Silverlight 应用程序架构,拥有超过 9 年的项目实施及管理经验,带领过政府、医药、能源、保险、互联网等多个领域的项目,并一直应用.NET 技术进行研发。

Java.NETRuby语言 & 开发