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

摘要:
为了在WCF服务和客户端之间成功通信,必须遵循特定的协议。WCF规定WCF服务和WCF客户端之间发送的所有消息都遵循SOAP协议。WCF中有四种类型的合同。消息队列用于提供脱机消息服务,也就是说,当调用服务时,WCF服务程序可能没有运行,并且调用请求被放入消息队列中。WCF服务程序启动后,请求被取出并解析,以向WCF客户提供服务。WCF服务和WCF客户位于此管道的两端。服务托管概述WCF服务应具有托管程序。ServiceHost对象位于WCF中。ServiceHost对象负责启动和停止服务。
  • 一个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()方法添加终结点。

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

WCF学习笔记之 搭建WCF技术知识框架第1张

免责声明:文章转载自《WCF学习笔记之 搭建WCF技术知识框架》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇FFMPEG 常用命令行RabbitMQ的集群模式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【转载】通过服务端监控结果,说说WCF的并发处理

InstanceContextMode表示的是,WCF允许产生可用来处理包含在传入消息中的调用的服务(契约类)的实例InstanceContext模式数,WCF的并发模式ConcurrencyMode是针对某个封装了服务实例的InstanceContext而言的 简单的说,InstanceContextMode表示产生多少个服务实例对象,Concurren...

[WCF]将WCF程序部署在IIS上

WCF 机制确实不错,虽然谈不上对它有多了解,但仅从应用的角度看,有两个显著:封装通信,契约编程。下面演练一个Demo 来看看如何将 WCF 部署在IIS里头。这个 Demo 服务器提供一个运算服务,客户端根据服务器契约调用该服务,得到结果。 1,新建一个目录(IIS具有访问权限的,所以别在系统目录中创建) IISHostedCalcService,然后在...

WCF服务

创建了一个WCF服务之后,为了能够方便的使用WCF服务,就需要在客户端远程调用服务器端的WCF服务,使用WCF服务提供的方法并将服务中方法的执行结果呈现给用户,这样保证了服务器的安全性和代码的隐秘性。 18.5.1 在客户端添加WCF服务为了能够方便的在不同的平台,不同的设备上使用执行相应的方法,这些方法不仅不能够暴露服务器地址,同样需要在不同的客户端上能...

WCF NetTcpBinding 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作

背景:WindowsService + WCF + NetTcpBinding 之前一直使用http协议模式,改为net.tcp之后隔段时间出现:由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。 127.0.0.1:9000 记录时间:2016-01-14 10:02:58日志级别:Exception 日志位置:CloudTraPlatSOA....

NetCore无需添加web/wcf引用来调用webservice

较新的WebService能支持HttpGetHttpPostSOAP1.1SOAP1.2,这样的话和普通的http请求调用方式一样,只不过 string url = "http://localhost:5010/WebTest.asmx/PostTest"; // 参数 Dictionary<string, string> dicParam...

服务应用之WEB与WCF使用之见

APP_Code WEB: WebService.cs 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Services; 6 7 /// <summary> 8 /...