WCF服务编程(学习笔记)

WCF(Windows Communication Foundation)是Windows平台上用于开发和部署服务的SDK。它支持多种传输协议和服务交互方式,通过地址、绑定和契约三个核心要素实现服务的定义与调用。WCF服务可通过元数据描述功能和通信方式,客户端通过代理进行调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Windows 通信基础(Windows Communication Foundation,WCF)是基于Windows 平台下开发和部署服务的软件开发包(Software Development Kit,SDK)。

服务(Service)是公开的一组功能的集合。从软件设计的角度考虑,软件设计思想经历了从函数发展到对象,从对象发展到组件,再从组件发展到服务的几次变迁。

面向服务(Service-Orientation,SO)是一组原则的抽象,是创建面向服务应用程序的最佳实践。

WCF中的所有消息均为SOAP消息。注意WCF的消息与传输协议无关,这与Web服务不同。因此,WCF服务可以在不同的协议之间传输,而不仅限于HTTP。

WCF服务通过公开元数据(Metadata)的方式描述可用的功能以及服务采用的通信方式。

不管是本地服务还是远程服务,客户端总是通过代理(Proxy)调用服务。

一个公开的WCF服务由三部分组成(终结点EndPoint):地址Address、绑定Binding和契约Contract。

地址定义了服务的位置,绑定定义了服务通信的方式,契约则定义了服务的内容。

一般管理服务的方式简称为服务的ABC。

每个终结点都包含了三个元素,而宿主则负责公开终结点。从逻辑上讲,终结点相当于服务的接口,就像CLR或者COM接口一样。

 

核心要素:

从技术层面理解WCF,可以分为三个要素(俗称WCF的ABC)

1.Address(where):地址,是指访问服务的URI(可以是一个http地址,也可以是tcp的地址)。我到哪里(Where)寻找这个服务?

2.Binding(how):绑定,是指通讯所使用的协议,例如http,net.tcp,msmq等等。我如何(How)与这个服务交互?

3.Contract(what):合约,是指通讯的规范,例如服务的合约,数据的合约等等。这个服务是什么(What)?

 从系统层面理解WCF,可以分为四个要素

1.Contract:合约,定义一套合约,通常是WCF开发的起点。这也是唯一需要在宿主和客户端之间共享的信息,通常是一些接口(interface)定义。

2.Service:服务,基于合约实现的一个具体服务。通常是一些类型(class)定义,实现了业务逻辑。

3.Host:宿主,既然服务是一个class,它自身是无法对客户端请求进行响应的。所以需要有一个宿主程序来提供持续的监听。WCF的宿主可以是任意的应用程序,非常灵活。

4.Client:客户端,任何客户端(例如Windows Forms,WPF, Silverlight,Console Application,甚至Javascript,或者java,php等等)都可以通过自己的方式来访问WCF.

 

WCF基本术语如下:

地址

WCF的每一个服务都具有一个唯一的地址(Addresses)。地址包含两个重要元素:服务位置与传输协议(Transport Protocol),或者是用于服务通信的传输样式(Transport  Schema)

例如:URI为http://localhost:8001/MyService,则读作:“采用HTTP协议访问localhost机器,MyService服务在8001端口处等待用户的调用。”

URI 即统一资源标识(Universal Resource Identifier)

契约

WCF 的所有服务都会公开为契约(Contract)

WCF 定义了四种类型的契约:

服务契约(Service Contract):描述了客户端能够执行的服务操作,即服务端公开的方法。方法契约(OperationContract)

数据契约(Data Contract):定义了与服务交互的数据类型,即自定义类型。

错误契约(Fault Contract):定义了服务抛出的错误,以及服务处理错误和传递错误到客户端的方式。

消息契约(Message Contract):允许服务直接与消息交互。如果系统要求互操作,或者遵循已有消息格式,那么消息契约会非常有用。

只有接口(或者类)可以被标记为 ServiceContract 特性,从而被定义为WCF服务,其他类型都不允许。

WCF 只允许将OperationContract 特性应用到方法上,而不允许应用到同样属于CLR概念的属性、索引器和事件上。WCF 只能识别作为逻辑功能的操作(Operation)。

契约操作不能使用引用对象作为参数,只允许使用基本类型或数据契约。

服务类的约束:避免使用带参构造函数,因为WCF只能使用默认构造函数。虽然类可以使用内部的属性、索引器以及静态成员,但WCF客户端却无法访问它们。

每个WCF服务都必须托管(Hosting)在Windows 进程中,该进程被称为宿主进程(Host Process)。

单个宿主进程可以托管多个服务,而相同的服务类型也能够托管在多个宿主进程中。

绑定(Binding)

一个绑定封装了诸如传输协议、消息编码、通信模式、可靠性、安全性、事务传播以及互操作性等相关选项的集合,使得它们保持一致。绑定使得开发者能够基于不同的基础

功能模块使用相同的服务逻辑。

标准绑定

WCF定义了9种标准绑定

基本绑定(Basic Binding)

由BasicHttpBinging类提供。基本绑定能够将WCF服务公开为旧的 ASMX Web 服务,使得旧的客户端能够与新的服务协作。

传输协议:HTTP/HTTPS  编码格式:Text,MTOM  支持互操作性

注:MTOM:有效负载编码格式。(Message Transport Optimization Mechanism)

Web服务(WS)绑定

由WSHttpBinding类提供。WS绑定使用HTTP或HTTPS进行传输,为基于Internet的通信提供了诸如可靠性、事务性与安全性等特性。

传输协议:HTTP/HTTPS  编码格式:Text,MTOM  支持互操作性

WS双向绑定(Duplex WS Binding)

由WSDualHttpBinding 类提供。WS双向绑定与WS绑定相似,但它还支持从服务到客户端的双向通信。(第五章)

传输协议:HTTP  编码格式:Text,MTOM  支持互操作性

 

托管:

1.IIS

IIS托管:优势是宿主进程可以在客户端提交第一次请求的时候自动启动,还可以借肋IIS管理宿主进程的生命周期。IIS托管的主要缺点在于只能使用HTTP协议。

IIS托管需要在IIS下创建虚拟目录,并提供一个.SVC文件。使用IIS托管,服务的基地址必需与.svc文件的地址保持一致。

2.Windows 激活服务(Windows Activation Service,WAS)

IIS 与WAS 的主要区别在于WAS并不局限于使用HTTP,它支持所有可用的WCF 传输协议、端口与队列。

若要使用WAS 托管WCF服务,必须提供一个.svc文件,这与IIS 托管一样。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值