代码改变世界

Expert C# 2008 Business Objects 第21章 WCF服务接口 NO.1

2009-05-08 15:26  sapajou  阅读(572)  评论(0编辑  收藏  举报

      像在第19章中讨论的WPF技术一样,WCF也是微软从.Net 3.0平台开始提供的一项重要技术。WCF为构建面向服务的应用程序、C/S应用程序、基于消息的应用程序或其他类型的分布式应用程序提供了一个统一的方法。实际上WCF替代或抽象了几种旧有的技术:

  • Web Services(asmx services)
  • Remoting
  • Enterprise Services
  • MSMQ
  • WSE

      在第15章,我讨论了使用WCF技术的CSLA.Net数据门户是如何基于移动对象的概念实现一个强大的C/S模型。你可以使用XML Services构建C/S应用程序或面向服务应用程序中的一种。我的建议是当使用服务构建应用程序接口时,你应该遵循基于消息的、面向服务的架构。这会导致你的服务和消费这些服务的应用程序之间的松耦合,松耦合进而会增加你整个系统和所有使用服务进行交互的应用程序的可维护性。

      在本章中,我会像过去构建XML Services一样提供一个关于WCF的简短概述。然后为了说明业务对象是如何支持XML Services的创建,我会探讨为ProjectTracker业务对象创建一个WCF服务接口。不过,首先我们需要讨论一下C/S和SOA模型中的不同。

21.1 在C/S和SOA中选择

      在任何有意义的关于SOA的讨论中术语都是很重要的。表21-1定义了我在本章将会用到的术语。

表21-1 重要的面向服务术语

术语 定义
应用程序 在逻辑信任边界内实现的一套行为。这个术语包括传统的单层、两层和N层应用程序,像消费服务的应用程序一样,也包括提供服务接口的应用程序。
边界应用程序 提供用户接口和从其他应用程序消费服务的应用程序,它位于系统的边界处。
逻辑信任边界 描述了安全和语义信任的边界。穿过该边界的数据或消息是不被信任的,不管是由于安全的原因还是因为你不知道代码是否遵循了你的语义规则。
XML Service(或者仅仅是Service) 以XML消息的形式实现其接口层的应用程序,该消息从一个消费应用程序接收或者返回给消费应用程序。
消费应用程序 使用XML消息与一个或多个其他应用程序交互的应用程序。
系统 一组使用XML消息互相交互的两个或多个应用程序。

 

      总之,这意味着一个应用程序是一个自包含的实体,那可能是一个WPF应用程序,一个Web应用程序,或者是一个服务。每个应用程序都可能使用单层、两层或者N层物理模型进行部署,并且每个应用程序都可能使用N层逻辑模型来实现,就像第一章中描述的那样。

      这也意味着服务被用来在应用程序之间进行通信而不是在应用程序的内部,服务通信常常跨越从一个应用程序到另一个应用程序的边界。

      当你开始使用服务在不同的应用程序之间的进行互连时,你就是在创建一个系统。这些应用程序中没有一个可以互信,每一个都有它自己的信任边界。然而,它们可以通过传递消息进行交互,这也就形成了一个每个应用程序都可以独立地更新版本并且在不破坏整个系统的情况下进行维护的松耦合环境(在合理范围内)。

      现实是很少的组织以面向服务的方式构建XML Services和Web Services,绝大多数的XML Services是用N层C/S方式构建的。

      使用XML Services构建C/S应用程序是没有什么错误的。(很明显,我认为C/S是极有用的,可以看一下数据门户。)然而,认识到N层模型和SOA的不同是很重要的,这样你才能有意识的选择你想要用的是哪一个架构。

      在第15章,我演示了使用WCF实现C/S的方法,所以本章将致力于基于消息的、面向服务的实现。在这个上下文中,你的应用程序要么是服务的提供者要么是服务的消费者(或者两个都是)。

      如果你的应用程序是服务的提供者,你应该知道XML Services从根本上说仅仅是数据交换的一种文本格式,就像Web应用程序中的HTML那样。很明显,我建议一个XML Service仅仅是应用程序接口的另一种类型。我已经讨论了允许用户访问应用程序的WPF和Web Forms 接口,接收并返回XML消息的服务仅仅是另一种类型的接口,如图21-1所示。

image

 

 图21-1 应用程序接口的各种类型

      XML Services只是应用程序可提供的另一种类型的接口,主要的不同就是一个XML Service被设计成被其他的应用程序使用,而不是直接被用户使用。另一个应用程序可以使用这些服务获取或更新你的应用程序中的数据,这个消费你的数据的另一个应用程序可能有也可能没有它自己的用户。这个概念如图21-2所示,你可以看到一个没有最终用户的消费应用程序和一个以人作为最终用户提供用户接口的边界应用程序。

image

 

图21-2 消费服务接口

 

      未完待续!