WCF资料
1.Service Class:一个标记[ServiceContract](服务契约)Attribute(属性)的类,在其中可能包含多个方法。
除了标记一些WCF特有的Attribute(属性)外,这个类与一般类没有什么区别。
2.Host(宿主):可以是应用程序,如进程Windows Service等,它是WCFService运行的环境。
3.Endpoints(终结点):可以是一个,也可以是一组,它是WCF实现通信的核心要素。
WCFService由一个Endpoints集合组成,每一个Endpoint就是用于通信的入口,客户端和服务端通过Endpoint交换信息,如下图:
从图中我们可以看到一个Endpoint由三部分组成:Address,Binding,Contract。便于记忆,
我们往往将这三部分称为是Endpoint的ABC。
WCF的三大核心是ABC也就是
A代表Address-where(对象在哪里)
B代表Binding-how(通过什么协议取得对象)
C代表Contract(契约)-what(定义的对象是什么,如何操纵)
Address:是Endpoint的网络地址,它标记了消息发送的地址。
Binding:描述的是如何发送消息,例如消息发送的传输协议(如TCP,HTTP),安全(如SSL,SOAP消息安全)。
Contract:则描述的是消息所包含的内容,以及消息的规范和操作方式。
所以Endpoint中的ABC分别代表的含义就是:where,how,what。当WCF发送消息时,通过address知道信息发送的地址,通过binding知道信息怎么样来发送的,通过contract则知道发送的消息时什么。
SOAP:简单对象访问协议,简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。
合约(Contract)
WCF 的基本概念是以合约(Contract) 来定义双方沟通的协议,合约必须要以接口的方式来体现,而实际的服务代码必须要由这些合约接口派生并实现。合约分成了四种:数据合约 (Data Contract),订定双方沟通时的数据格式。服务合约 (Service Contract),订定服务的定义。操作合约 (Operation Contract),订定服务提供的方法。消息合约 (Message Contract),订定在通信期间改写消息内容的规范。一个 WCF 中的合约,就如同下列代码所示: using System;
using System.ServiceModel;
namespace Microsoft.ServiceModel.Samples
{
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")] // 服务合约 public interface ICalculator
{
[OperationContract] // 操作合约
double Add(double n1, double n2);
[OperationContract] // 操作合约
double Subtract(double n1, double n2);
[OperationContract] // 操作合约
double Multiply(double n1, double n2);
[OperationContract] // 操作合约
double Divide(double n1, double n2);
}
}
协议绑定 (Binding)
由于 WCF 支持了 HTTP,TCP,Named Pipe,MSMQ,Peer-To-Peer TCP 等协议,
而HTTP又分为基本 HTTP 支持 (BasicHttpBinding) 以及 WS-HTTP 支持 (WsHttpBinding),而 TCP 亦支持 NetTcpBinding,NetPeerTcpBinding 等通信方式,因此,双方必须要统一通信的协议,并且也要在编码以及格式上要有所一致。
一个设置通信协议绑定的示例如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<!-- 设定服务系结的资讯 -->
<services>
<service name=" CalculatorService" >
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="Binding1" contract="ICalculator" />
</service>
</services>
<!-- 设定通讯协定系结的资讯 -->
<bindings>
<wsHttpBinding>
<binding name="Binding1">
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
</configuration>
虽然 WCF 也可以使用 SOAP做通信格式,但它和以往的 ASP.NETXML Web Services不同,因此有部分技术文章中,会将 ASP.NET 的 XML Web Services 称为 ASMX Service。WCF 的服务可以挂载于 Console Application,Windows Application,IIS (ASP.NET) Application,Windows Service以及 Windows Activation Services中,但大多都会挂在 Windows Service。
安全性层次
WCF 实现上已经支持了传输层次安全性 (Transport-level security) 以及消息层次安全性 (Message-level security) 两种。传输层次安全性:在数据传输时期加密,例如 SSL。消息层次安全性:在数据处理时就加密,例如使用数字签名,散列或是使用密钥加密法等。
WCF支持的转传输安全模式
在WCF中,一同支持5种传输安全模式,这些模式都是可配置的,如下所示列出了这些模式和其简要说明。
1.None:None模式指的是不采用任何传输安全机制。客户端不向服务端提供任何凭证,也不确保通道是安全的。None模式没有任何安全可言,通常是在绝对安全的网络孤岛内使用None模式,以提高系统效率。
2.Transport:当使用Transport(传输/运送/运输)安全模式时,WCF将依靠传输通道来实现完整性,机密性和互相验证性的功能。可以提供安全通道传输协议包括HTTP,TCP,IPC和MSMQ。也就是说,使用这些传输协议的绑定都可以使用Transport安全模式。
3.Message:Message安全模式对消息本身进行加密来保证完整性,机密性和互相验证性。和Transport安全模式不同,Message安全模式不依赖任何传输通道或者网络,所以该模式的不需要考虑客户端和服务端之间是否直接通信,该安全模式是标准模式。
4.Mixed:Mixed模式结合了Transport安全模式和Message安全模式,Mixed安全模式在实现消息完整性,机密性和服务端身份验证是采用了Transport安全模式,而在保护客户端安全凭证的安全时又采用了Message安全模式。
5.Both:Both安全模式同时使用了Transport安全模式和Message安全模式。在实际情况中很少使用Both模式,因为其过渡的安全机制使用导致了系统性能的下降。