WCF=Windows Communication Foundation
WCF技术允许创建服务,访问跨进程,机器和网络的其他应用程序。
WCF是微软分布式 应用程序开发的集大成者,它整合了.Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASMX、WSE和MSMQ。
是微软为SOA而设计的一套框架
WCF可以支持的协议包括TCP,HTTP,跨进程以及自定义,安全模式则包括SAML, Kerberos,X509,用户/密码,自定义等多种标准与模式。
WCF中的ABC
A:Address 服务地址
通过一个URL Endpoint告诉潜在的wcf
service的调用者如何找到这个 WCF service
表现形式:
Http协议:http://<server>:<port>/<service>
https://<server>:<port>/<service>
Tcp协议:net.tcp://<server>:<port>/<service>
管道:net.pipe://<server>/<service>
B:Binding 通过什么协议取得服务 绑定(指明通过什么方式(协议)连接wcf服务)
basicHttpBinding--使用http进行传输,数据格式为text/xml 类型webservice
wsHttpBinding--Http绑定的一种高级形式
wsDualHttpBinding 扩展了wsHttpBinding 双向通信
netTcpBinding Tcp通信,允许配置安全性,事务处理
netMsmqBinding消息队列
Http主要用于互联网中使用协议 Tcp一般用于局域网当中 消息队列一般用于离线消息服务
C:定义的服务是什么 协议 契约 合同
服务协定:包含服务的一般信息和服务提供的操作
操作协定:定义操作的用法
数据协定:定义复杂的数据类型
消息协定 错误协定
[ServiceContract]//服务协定
public interface IService1
{
[OperationContract]//操作协定
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
// 任务: 在此处添加服务操作
}
// 使用下面示例中说明的数据协定将复合类型添加到服务操作
[DataContract]//数据协定
public class CompositeType
{
bool boolValue = true;
string stringValue = "Hello ";
[DataMember]
public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
}
[DataMember]
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
}
WCF服务应用程序与WCF服务库
我们在平时开发的过程中常用的项目类型有“WCF 服务应用程序”和“WCF服务库”。
WCF服务应用程序,是一个可以执行的程序,它有独立的进程,WCF服务类契约的定义,可以直接看到运行的效果。此项目模板基于IIS托管的程序,如本系列的第一节所示。在开发基于IIS托管的WCF服务程序时,比较多见,自学的时候也可以使用这种类型,简单易懂。
WCF服务库,可以认为是一个包含WCF服务以及契约定义的类库。不能直接运行,你可以在其他项目里引用,在宿主里启用托管这个库,有点类似于我们在Web项目中应用的类库。考虑WCF服务设计的时候,服务类的定义为单独的库,可以为其它项目使用。提高代码的复用性。
当然你也可以修改这些代码,比如把WCF服务程序里的类,移到一个单独的类库里,或是把类库里的类移到WCF服务程序中。
WCF在通信过程中有三种模式:请求与答复、单向、双工通信
请求与答复模式为WCF的默认模式
单向模式要在OpertaionContract的属性中显示设置值,代码如下:
特点:使用 IsOneWay=true 标记的操作不得声明输出参数、引用参数或返回值1 [OperationContract(IsOneWay = true)] 2 void ShowName(string name);