服务(Services)是公开的一组功能的集合。一个面向服务应用程序(SOA)将众多服务聚集到单个逻辑的应用程序中,这就类似于面向组件的应用程序聚合组件,或者面向对象的应用程序聚合对象。

服务可以是本地的,也可以是远程的,可以由多个参与方使用任意技术进行开发。服务与版本无关,甚至可以在不同的时区同时执行。服务内部包含了诸如语言、技术、平台、版本与框架等诸多概念,而服务之间的交互,则只允许指定的通信模式。

服务的客户端只是使用服务功能的一方。理论上讲,客户端可以是任意的Windows窗体、ASP.NET页面或其他服务。

客户端与服务通过消息的发送与接收进行交互。WCF中的所有消息均为SOAP消息。注意:WCF的消息与传输协议无关,这与Web服务不同。因此,WCF服务可以在不同的协议之间传输,而不仅限于HTTP

因为服务的创建对外界而言是不透明的,所以WCF服务通常通过公开眼数据(Metadata)的方式描述可用的功能以及服务可能采用的通信方式。元数据的发布可以预先定义,它与具体的技术无关,例如采用基于HTTP-GET方式的WSDL,或者符合元数据交换的行业标准。一个非WCF客户端可以将元数据作为本地类型导入到本地环境中。相似的,WCF客户端也可以导入非WCF服务的元数据,然后以本地CRL类与接口的方式进行调用。

服务的执行边界

WCF不允许客户端直接与服务交互,即使它调用的是本地机器内存中的服务。相反,客户端总是使用代理(Proxy)将调用转发给服务。代理公开的操作与服务相同,同时还增加了一些管理代理的方法。

WCF允许客户端跨越执行边界与服务通信。如图1所示,在同一台机器中,客户端可以调用同一个应用程序域中的服务,也可以在同一进程中跨应用程序域调用,甚至跨进程调用。

 

图1 使用WCF实现相同机器通信

图2则展示了跨机器边界的通信方式,客户端可以跨越Intranet或Internet的边界与服务交互。

 

图2 使用WCF实现不同机器通信