WCF学习笔记之 - 搭建WCF技术知识框架

  • 一个WCF服务向WCF客户提供一些可用的功能。WCF客户通过终结点(endpoint)来访问WCF服务。因此,一个WCF服务至少要包含一个终结点。如果允许服务端反过来调用客户端的代码(即所谓回调callback),则客户端也应该提供回调所使用的终结点。
  • WCF服务与客户程序要想成功通讯,必须遵循特定的协议,WCF规定,在WCF服务与WCF客户间发送的所有消息都遵循SOAP协议。
  • 终结点与它的“ABC”每个终结点都向外界提供一个服务的访问点。

每个终结点都定义着一个地址(A:Address),指明“到哪儿可以找到服务”。

绑定(B:Binding)指明“如何与服务进行通讯”。

契约(C:Contract)定义了“服务能干哪些事”。契约定义了一个终结点向外界发布的操作,以及WCF服务与客户相互通讯时的消息格式。WCF中有四种类型的契约。

服务契约(Service Contract)

实现“服务契约”很容易:定义一个接口,给接口附加[ServiceContract],给接口方法附加[OperationContract]。
[ServiceContract]
public interface IHelloWCFService
{
[OperationContract]
string GetServiceMessage();
}

[ServiceContract]还可以直接施加于类之上。但不推荐这么做。另外,一个类可以实现多个[ServiceContract]。

 

数据契约(DataContract)

数据契约定义将在客户端与服务器端传送的各种数据类型。
[DataContract]

structContact

{

    [DataMember]

    public string FirstName;

    [DataMember]

    public string LastName;

}

定义数据契约时需要使用[DataContract]和[DataMember]。

消息契约(Message Contract):可以使用消息契约来定制WCF服务与WCF客户间相互通讯的SOAP消息格式。

错误契约(Fault Contract):定义在服务中如何处理异常,以及这些异常又如何传送到客户端。

 

A:地址(Address)地址指明在哪儿可以找到特定的WCF服务。地址的格式如下:
http://localhost:8000/HelloWCFService

[通讯协议]://[服务器名或IP地址][:端口号]/[可选的其他URI]

只要子地址不同,不同的服务可以共享同一个TCP端口。

 

 WCF地址类型与通讯协议对应

使用TCP:地址以“net.tcp”打头,多用于局域网环境

使用HTTP:地址以“http”和“https”打头,多用于互联网环境

使用消息队列:地址以“net.msmq”打头。消息队列用于提供离线的消息服务,即调用服务时WCF服务程序可以还没运行,调用请求被放到一个消息队列中,WCF服务程序启动后取出此请求,解析后向WCF客户提供服务。适用于局域网环境。

使用命名管道:地址以“net.pipe”打头。当WCF服务与WCF客户都位于同一台计算机时,这种通讯方式可以获得好的性能

 

服务的基地址与子地址

一个服务,可以有多个终结点,服务的地址称为“基地址”,而终结点地址是在此基础上再追加一个子地址而确定的。

 

B:绑定(Binding)绑定定义了客户端与服务端交换信息所需要的通讯配置参数,比如传输协议,消息编码方式等。

简单地说:绑定定义了客户端如何与服务端通讯。WCF服务可以使用多种类型的绑定,.NET提供了一些现成的绑定可供使用。

此外,.NET还提供了一个CustomBinding类,用于自定义绑定。真的是非常灵活!

 

WCF预定义绑定

BasicHttpBinding、WSHttpBinding和WSFederationHttpBinding:使用HTTP

WSDualHttpBinding:使用两个HTTP通道实现双向通讯

NetTcpBinding:使用TCP

NetPeerTcpBinding:使用P2P(很Cool的一个绑定,后面会用它来开发有趣的应用)

NamedPipeBinding:使用命名管道

NetMsmqBinding和MsmqIntegrationBinding:使用消息队列

 

有关绑定需要注意的……

绑定定义了与终结点进行通讯的通道(channel )。

可以把通道想象是自来水管,信息就是在管中流动的水。

WCF提供不同用途的“管子”,有的管子只管传输信息,有的管子负责保证数据安全,有的管子负责压缩数据,……,把这些不同用途的管子接在一块,就形成了一个“信息水管”。WCF服务与WCF客户分别位于这个管子的两端。

整个“信息水管”是一段段的,每一段都可以被取走或替换为另一种功能的“管子”(你也可以创建自己的“管子”),通过管子的动态组合可以实现高度的灵活性。

 

服务的宿主

概述WCF服务应有一个宿主程序。可选的宿主程序类型有:IIS,WAS,Windows Form/WPF Application,Console Application,Windows Service。

在客户端可以访问服务之前,服务宿主进程必须启动。

一个服务宿主程序可以同时承载多个服务。

ServiceHost对象

在WCF中,由ServiceHost对象负责启动和停止服务。每个服务都对应着一个ServiceHost对象,调用ServiceHost.Open方法启动服务,这时可以接收客户端的服务请求,调用ServiceHost.Close方法停止服务,这时,不再理会客户端的服务请求。

注意对应关系!

一个服务宿主程序可以同时承载多个服务,每个服务对应着一个ServiceHost对象。

一个ServiceHost可以拥有多个终结点(牢记终结点的“ABC”),通过调用ServiceHost.AddServiceEndPoint()方法添加终结点。

使用配置文件定义服务为了方便起见,我们一般使用配置文件来定义服务的终结点。 

 

posted @ 2010-07-11 00:09  Devbar  阅读(515)  评论(0编辑  收藏  举报