描述 NET Framework
应用程序开发的目标始终如一就是在最短时间内制作出最好的软件然而随着开发平台的性能越来越高制作软件的壁垒也相应提高了以 Windows 为例原来的 Win 接口已经融入到功能更强的 NET Framework 中 年发布的 Framework 和 年发布的 Framework 为设计和编写 Windows 软件的开发人员提供了更好的工作环境效率也更高
NET Framework (以前称为 WinFX)就是我们前进路上的下一个目标建立在这一新版 Framework 上的应用程序可通过 Visual Studio 创建对大多数 Windows 开发人员来说这样的应用程序将会更加熟悉NET Framework 是从 版本演化而来并在原来的基础上添加了许多新的功能NET Framework 计划于 年底发布适用于 Windows VistaWindows Server 和 Windows XP
本文对 NET Framework 及其组件进行了整体描述目的是让大家对这一新版本有一个清晰的了解同时分析了采用的技术并给出简要说明
创建现代应用程序主要挑战
今天开发一款优秀的应用程序可不简单 您需要考虑众多的要求传统的考虑因素如访问数据通过 Web 浏览器上网等固然重要但这些已经显然不够了下面列出了现代应用程序面临的一系列新挑战
组织越来越倾向于从面向流程的角度看待他们的工作由于大多数应用程序已经对业务流程实现了部分自动化因此在代码中明确流程中的这几个步骤就非常重要了而要实现这一目标最有效途径是使用工作流技术这是一种需要支持基于工作流的应用程序的方法
通常来讲应用程序要与组织内外的其他应用程序进行通信现代应用程序还必须适用于面向服务的架构 (SOA)同时还要实现一些功能作为其他软件可以访问的交互服务要实现这些目标就需要支持面向服务的应用程序
对于使用应用程序的人员来说通常还需要有传递识别信息的方法目前定义和使用数字标识的技术各不相同这也是造成网页仿冒等问题泛滥的原因有鑒于此现代应用程序及其使用者将会从一致的数字标识用户控件中受益
对于现代用户界面人们的要求也有了很大幅度的提高要提供真正的业务价值往往需要处理不同类型的文档使用二维或三维图形播放视频等等还要保证本地 Windows 客户端和 Web 浏览器能够兼容这些功能要满足这些要求需要不同的用户界面采用统一的方法
一般说来现在的应用程序需要应对以上部分或全部的挑战因此这些应用程序的开发平台应该采用一致可行的方法来解决所有的相关问题……NET Framework 就是专为解决这些 Windows 应用程序难题而设计
应对挑战NET Framework 功能介绍如图 所示NET Framework 版是在以前版本的基础上完善而成事实上版本保留了 NET Framework 的全部功能因此在以前版本基础上开发的应用程序仍然可以正常使用NET Framework 添加了四个新组件Windows Workflow FoundationWindows Communication FoundationWindows CardSpace 和 Windows Presentation Foundation本节将会概要介绍 NET Framework 和上述四个新组件的功能
·NET Framework Windows 应用程序通用基础
尽管仍然可以通过 Win 界面直接编写软件而事实上却是NET Framework 已经成为编写新 Windows 应用程序的主流环境如下所示为NET Framework 最重要的组成部分
· ASPNET支持可 Web 访问的应用程序的开发
· ADONET允许应用程序访问相关的其他类型数据
· Windows Forms支持建立 Windows 应用程序的图形用户界面 (GUI)
· SystemXML使应用程序能够使用 XML 定义的数据包括 XSLT 和 XPath
Framework 的 版本在以前版本的基础上添加了几项实用功能包括对开发 ASPNET Web 应用程序的技术改进支持在 位 Windows 上运行的 位应用程序还增加了处理事务的新方法虽然 NET Framework 中的部分组件为 版本中新增组件所取代但是 版本的技术仍然是新发布的 版本的基础请见随后的详细介绍
Windows Workflow Foundation支持基于工作流的应用程序
工作流是一个简单思路按照特定顺序执行的一系列步骤您甚至可以认为每个应用程序都在执行工作流因为每个应用程序都执行某些过程但是在使用 C#Visual Basic 或其他编程语言等传统方法开发的应用程序中这些过程都隐含在代码中这样做没问题但是这些过程被深深地嵌入程序逻辑中使得其执行或更改愈加困难
使用工作流技术执行过程逻辑可以有效地解决这一问题采用工作流技术后逻辑与普通代码就不会纠缠在一起过程中的每一步骤都会明确定义然后由工作流引擎执行这样做的结果就是过程执行清楚明确
工作流引擎不是什么新概念有些已经在 Windows 和其他系统中得到应用Microsoft 已经在部分产品中嵌入了工作流引擎但是随着工作流日渐成为开发应用程序的主流方法提供适用于 Windows 的单一工作流技术已经势在必行这也正是 Windows Workflow Foundation(正式缩写是 WF )的设计初衷由于其提供了适用于 Windows 的通用工作流技术WF 已成为所有基于工作流应用程序的统一创建基础Microsoft 的 Microsoft Office 系统Windows SharePoint Services 等软件以及许多其他公司的应用程序也会使用 WF
但是提供通用的工作流技术之路却是困难重重举例来说如何使用一种方法来满足不同工作流应用程序的各种要求?WF 给出的答案是从全局视角来看待工作流如图 所示WF 工作流只是一组由 WF 引擎执行的活动一个活动就是一个类它可以包含工作流创建者认为有必要的任何工作活动可以在不同的工作流中重复使用因此在针对新问题创建自动化的解决方案时过程将会更加容易
提供通用工作流技术面临另一个困难是面向人员工作流和面向系统工作流的传统分歧通常来说工作人员使用的工作流应用程序需要有较高的灵活性能够进行实时更改而一般由系统也就是由软件使用的工作流应用程序则相对更加静态但要求尽可能高效WF 综合考虑了这两种不同的使用情况不仅包括面向人员的功能(如更改运行中工作流的功能)同时还支持更多面向系统的操作
通过 WF 的 Windows 通用工作流技术NET Framework 为广大开发人员提供了一种非常有用的软件开发模式随着面向流程的软件继续风行工作流技术也会随之推广
Windows Communication Foundation支持面向服务的应用程序
无论是通过工作流还是其他方式开发绝大多数应用程序都需要与其他应用程序进行通信近几年来应用程序间的通信技术发展迅速在长达数十年的不统一之后主要供应商之间最终达成了一致的应用程序通信协议根据 SOAP 这一全球 Web 服务协议基于 JEENET Framework 等不同技术平台开发的应用程序间的互操作性相比以前大为简化它还会使面向服务的架构这一思想为更多的组织接受
当然现在的通信方式已经不少了以 NET Framework 为例您可以选择以下几种通信方式
· ASPNET Web 服务提供基于 SOAP 的交互通信
· NET Remoting主要用于 NET 应用程序之间的通信
· Enterprise Services支持可扩展的事务性应用程序
· SystemMessaging通过 Microsoft Message Queuing (MSMQ) 支持队列消息
· Web Services Enhancements (WSE)它是 ASPNET Web 服务的扩展支持 WSSecurity 等新规范
这些技术都有其自身的价值在实际应用中也有着各自的地位可是既然问题是一样的为什么要采用好几种不同的解决方案呢?为什么不根据交互服务来建立一个单一的应用程序通信基础?
这正是 Windows Communication Foundation (WCF) 的设计初衷有了 WCF开发人员不必再像从前一样处理每一类通信都要使用到不同的应用程序编程接口技术 - WCF (最初的代号为Indigo)以通用的 API 提供通用的方法在 NET Framework 环境下大多数使用上述技术之一的应用程序将会代而使用 WCF
WCF 通过 SOAP 提供强大的交互通信支持这是现代计算机设备的基本要素它还支持多项 WS* 规范如 WSSecurityWSReliableMessaging 和 WSAtomicTransactionWCF 不需要 SOAP但是可能会使用其他方法包括优化二进制协议MSMQ 队列消息 和基于 REST 的简单通信WCF 同样采取明确的面向服务方法来进行通信WCF 不会在对象间进行透明通信而是为通信各方提供略微不同的抽象服务其结果之一就是放开了分布式对象系统间某些紧密的耦合关系使得交互出错减少并且更容易修改
无论是在组织内部还是组织之间应用程序通信都是现代软件的基本功能NET Framework 以其 WCF 面向服务方法解决了这一难题
Windows CardSpace一致的数字标识用户控件
请您想一下人们在 Internet 上是如何表示各自身份的多数情况下是将个人的数字标识作为一个简单的用户名再加上密码之后就可以使用这个标识访问电子邮件帐户网上商店网上银行和其他一些金融机构了尽管这种方法很简单现在也在普遍应用但是用户名和密码方式有着无法回避的缺点最重要的两项是
要记住登录众多网站的不同用户名和密码的确让人不胜其烦为了减少这些麻烦许多人在不同网站使用相同的用户名和密码可这样又增加了安全风险
用户名密码和其他个人信息可能会被网页仿冒者窃取网页仿冒者会发送欺骗性电子邮件诱使受害者去登录一个假冒网站比如一个与受害者银行极其相似的仿冒网站而这个网站实际上是网页仿冒者控制的一旦受害者输入自己的用户名和密码网页仿冒者就会利用这些信息在真网站冒充该用户牟取不当利益
要减少这些问题的危害性我们需要采用新的方法来管理数字标识Windows CardSpace(最初代号为InfoCard)是这种新方法中的重要组成部分为帮助人们追蹤自己的数字标识CardSpace 用不同的信息卡来表示每个数字标识如果网站接受 CardSpace 登录那么用户在尝试登录这一网站时会看到 CardSpace 选择屏幕如图 所示您可以选择一张卡片这就相当于选择了登录该网站的数字标识不必再去费心记住数不清的用户名和密码用户只要记住他们要使用的那张信息卡就可以了不同的信息卡还包含其他信息用户可以通过它控制登录网站时提交的信息
信息卡表示的这些标识是由一个或多个标识提供者创建而成的组织可以有自己的标识提供者而不必依赖于简单的用户名和密码每个标识提供者都会采用更加强大的加密机制让用户来验证他们的标识CardSpace 本身也包含一个自发行的标识提供者可以在客户端计算机上运行使用这一提供程序用户可以创建自己的标识且标识也不必依赖密码进行身份验证网站接受这些自发行 CardSpace 标识这样就不必再依赖常见的密码方法自然会减少因密码而带来的诸多问题
不用密码登录网站网页仿冒者也就无密码可偷了!但是如果网页仿冒者成功诱使受害者访问假冒网站的话他们还是会窃取用户的其他信息如敏感的医疗信息等要杜绝这种情况就要求用户自己能够区别假冒网站和真网站为帮助用户识别网站拥有网站的组织应获取高度确认认证与现在的 SSL 简单认证不同新的认证方式涉及到更多更严格的流程其中包括采用更严格的方式来证明申请该项认证的组织的身份高度确认认证上还可以带有公司徽标和其他信息帮助用户准确识别使用证书的网站是否合法用户访问新网站时CardSpace 会始终以标准屏幕显示该网站的证书信息根据认证的接受程度屏幕上会自动显示出对网站标识的确认程度其目的是强制用户明确界定网站是否可信然后帮助他们作出正确选择
Windows CardSpace 实际上是更大的标识元系统的一部分标识元系统完全基于开放的公共协议它定义了一种全新的方式能够使不同的数字标识技术在各个不同的平台(包括 Windows 以外的操作系统)和应用程序(包括 Internet Explorer 以外的 Web 浏览器)上使用CardSpace 采取通用的方法来选择标识和其他 Windows 信息因而在元系统中扮演着重要角色并且由于解决了基本的标识问题CardSpace 也已经成为 NET Framework 的重要组成部分
Windows Presentation Foundation适用于不同用户界面的统一方法
对几乎所有的应用程序来说用户界面都是重要的组成部分现在用户对这些界面的要求越来越高了当然我们仍然需要传统的菜单驱动式 GUI但是除此之外许多应用程序还需要能够播放视频运行动画采用二维或三维图形以及调用不同的文档无论是通过安装的桌面客户端还是通过 Web 浏览器来访问应用程序上述功能都必须可以正常使用
一直以来Windows 上的这些用户界面功能都是以不同方式提供的例如开发人员可以使用 NET Framework 中的 Windows Forms 来创建 Windows GUI使用 HTMLJava 小程序或 JavaScript 代码创建 Web 浏览器界面或是使用 Windows Media PlayerAdobe 的 Flash Player 等软件播放视频文档格式则以 Microsoft WordAdobe PDF 或其他软件进行定义很明显开发人员面临着巨大的挑战如何使用不同的技术为不同的客户端创建一致的用户界面这相当困难
Windows Presentation Foundation (WPF)最初代号为Avalon就是为解决这一难题而设计WPF 为所有的这些用户界面提供一致的技术基础从而大幅简化了开发人员的工作WPF 采用更为现代的方法支持视频动画二维或三维图形以及各种类型的文档从而可以让用户以全新的方式处理信息此外WPF 还为桌面客户端和浏览器客户端提供了通用基础大大简化了二者的应用程序开发工作
让我们以图 中的界面(其中包含了图像现场图三维视图等等)为例说明 WPF 的部分功能过去开发人员需要懂得各种技术才能进行工作而现在通过这种更为一致的方法开发人员可以轻松制作出类似示例中的用户界面
另外一个长期困扰用户界面开发人员的问题是如何创建高效界面需要的不同角色软件开发人员需要编写相应的界面逻辑但是他们并不是定义界面感观的最佳人选一般来说人机交互领域的设计人员和专家更适合这一工作但是在以前的技术(如 Windows Forms)背景下这些问题完全由开发人员决定开发人员和设计人员之间没有实现真正有效的协作WPF 借助于可扩展应用程序标记语言 (XAML) 解决这一问题XAML 是一种基于 XML 的语言允许以声明方式指定用户界面 -而非代码这就开发工具就能够根据设计人员创建的可视化显示更加容易地生成和使用界面规范实际上Microsoft 的一款新产品 Expression Interactive Designer 就是为此而设计使用这一工具(其他的由第三方提供)设计人员可以创建界面外观然后生成他们所创建界面的 XAML 定义开发人员将这些定义导入 Visual Studio 之后就可以着手构建界面所要求的逻辑了
开发人员创建了直接在 Windows 上运行的安装版 WPF 应用程序后就可以使用 WPF 提供的全部功能了但是若要创建在 Web 浏览器内部运行的客户端程序开发人员应创建一个 XAML 浏览器应用程序我们通常称之为 XBAP与安装版 WPF 应用程序的基本原理相同XBAP 允许在可下载的浏览器应用程序中表示与用户界面相同的样式两种应用程序可以使用相同的代码这也就意味着开发人员不再需要针对桌面和浏览器客户端的不同技术集特别是按照此类丰富 Internet 应用程序的现状在安全沙箱内运行从 Internet 下载的 XBAP将会限制应用程序的功能但是安装版 WPF 应用程序中提供的大量用户界面功能子集也可用于 XBAP
WPF 安装版应用程序和 XBAP 都可以利用 WPF 的现代图形支持其中包括使用硬件加速支持矢量图形以及其他更多功能通过提供更强大的图形支持功能WPF 使得一系列数据可视化选项成为可能而这依靠 Windows Forms 或其他的早期技术是不可能实现的WPF 还提供了 XML Paper Specification (XPS) 的基础可定义查看分发和打印固定格式文档的标准格式
用户界面是现代应用程序中复杂而重要的组成部分通过 WPFNET Framework 提供了一种比较完整和一致的解决方案用于应对用户界面方面的难题其目标是使构建用户界面的相关人员(包括开发人员和设计人员)能够更有效的进行工作
应用 NET Framework 设想
理解一组技术如何协同工作的最好方式就是查看其使用方式的示例现在假设一款应用程序要求客户和代理提交保单如果使用 NET Framework 执行则会有图 所示的工作流程
图表左上角所显示的应用程序业务逻辑是使用 WF 工作流得以实现的处理保单是一项多步骤流程包括根据组织的保险规则来评估此保单或许要检查投保人的信用甚至还要获得其上司的批准工作流依靠所需要的其他软件以活动方式实现流程中的每一个步骤如果要访问存储数据工作流中的活动可以使用 ADONET
保险公司可以提供一个呼叫中心使客户可以通过电话进行投保呼叫中心员工使用的客户端软件显示在图表的右上角是由安装版 WPF 应用程序实现的客户端使用 WCF 与应用程序业务逻辑进行通信采用的是经过 WCFWCF 通信优化的二进制协议如图所示呼叫中心工作人员依靠 Windows CardSpace 来选择他们在登录该应用程序时将要使用的标识
客户还可以通过网络进行投保而保险代理商也可以通过网络提交保单为便于网络操作该应用程序使用 ASPNET 与 Web 浏览器进行通信如图表的左下角所示客户通过 Internet Explorer 来访问该应用程序他们可以使用普通的 HTML 界面也可以使用 CardSpace 来选择自主设定的标识第三方也可以为其他客户端操作系统和浏览器实现标识选择机制使得标识元系统能够扩展至非 Windows 客户端和 Web 浏览器
保险代理商通过 Internet 访问该应用程序时可能需要具有更多功能的界面因此他们应该使用 XBAP 而非简单的 HTML 界面如图表底部中间位置所示这些客户可以共享呼叫中心所用 WPF 桌面应用程序提供的大部分用户界面功能由于两者构建在同一基础之上因此应用程序开发人员可以在两种类型的客户端中重复使用相同的代码对于其他类型的客户端来说代理商可以使用 CardSpace 选择他们针对该应用程序所设定的标识
最后此应用程序有可能需要与其他应用程序之间进行互访如果批准客户时要求信用审核则最有可能通过调用外部服务实现或者此应用程序会直接收到外部软件请求提供这些外部应用程序可以调用的服务在这些情况下如图表右下角所示该应用程序依靠 WCF 使用标准 Web 服务进行通信无论这些应用程序构建于何种技术之上WCF 对 SOAP 的支持都使得这些应用程序之间的交互变得轻而易举
该方案说明了如何使用 NET Framework 中最重要的组件来构建出色的应用程序而此处所举的简单示例省略了相当多的选项因此不能将其视为该系列技术所有功能的完整说明相反该示例只是提供一种思路用于讲解如何使用 NET Framework 的不同部分来解决实际的业务问题