通过做项目,对WCF有了一个全新的认识。那么他和WebService又有什么区别,他俩哪个更好呢?应该是各有各的好处吧。
什么是WCF?
.NET平台下的框架产品,由微软开发的一系列支持数据通信的应用程序框架,是Windows平台上开发分布式应用最佳的实践方式。
简而言之,就是为构建面向服务的应用提供的分布式编程框架,使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。
WCF的基本概念是以契约来定义双方沟通的协议,合约必须要以接口的方式来体现,实际的服务代码必须要由这些合约接口派生并实现。
WCF的体系架构:
契约:契约属于一个服务公开接口的一部分吗,一个服务的契约,定义了服务端公开的方法,使用的传输协议,可访问的地址传输的消息格式等内容。
服务运行:服务运行方面定义了服务在运行时的具体行为。
消息:消息方面包含了消息的传输方式、消息的编码与解码。消息方面的内容基本属于服务边界以内的具体实现。具体的传递实现,必须符合在契约中定义的绑定协议。
激活和宿主:一个WCF服务需要在一个可运行的程序中寄宿,常用的寄宿方式包括自寄宿、IIS寄宿、WAS、Windows服务,COM+组件等。
ServiceContract:包括ServiceContract和OperationContract,ServiceContract用于类或者结构上,用于指示WCF此类或者结构能够被远程调用;OperationContract用于类中的方法上,用于指示WCF该方法可被远程调用。
- <span style="font-family:KaiTi_GB2312;font-size:18px;">[ServiceContract]
- public interface IBasicOrganizationService
- {
- #region QueryAllOrganization-机构信息查询-赵亚盟-2015年5月19日20:17:28
- [OperationContract]
- List<BasicOrganizationViewModel> QueryAllOrganization();
- #endregion
- #endregion
- }</span>
DataContract:分为DataContract和DataMember,DataContract用于类或者结构上,指示WCF此类或者结构能够被序列化或者传输,也可以使用[Seralizable]代替;DataMember只能用在类或者结构的属性或者字段上,指示WCF该属性或者字段能够被序列化传输。
[csharp] view plain copy print ?- <span style="font-family:KaiTi_GB2312;font-size:18px;">[Classes("职务")]
- [DataContract]
- public class BasicJobViewModel
- {
- [Colum("职务代码", DbType = DbType.String)]
- [DataMember]
- [DisplayName("代码")]
- public string JobCode { get; set; }
- }
- </span>
FaultContract:错误契约,默认情况下,服务抛出的异常均以FaultException类型传递到客户端,通过它列出服务能够抛出的错误类型。
MessageContract:消息契约,它能自定义消息格式,包括消息头,消息体,还能指示是否对消息内容进行加密和签名。
什么是WebService?
平台独立的、低耦合的、自包含的、基于可编程的Web的应用程序,可使用开放的XML标准来描述、发布、协调和配置这些应用程序,用于开发分布式的互操作性应用程序。
简而言之:通过访问和使用远程Web服务可以访问不同系统中的数据。在使用时,通过Web服务Web应用程序不仅可以共享数据,还可以调用其他应用程序生成的数据,而不用考虑其他应用程序是如何生成这些数据的。
特点:开放性、跨平台性;返回数据而不是返回页面。
总结:使用Web服务能够实现数据重用和软件重用,这为建立松散偶合型的分布式系统提供了方便,实现Web服务需要HTTP、SMTP、SOAP、WSDL和UDDI等协议的支持;建立WCF服务需要建立服务定义文件、服务接口文件和服务逻辑处理文件。在使用WCF服务时,需要首先添加服务引用,再应用到Web窗体中