WCF学习总结(一)

来源:互联网 发布:淘宝商学院官网 编辑:程序博客网 时间:2024/04/30 21:12

概述:

Windows Communication Foundation (WCF)Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework 3.5的重要组成部分。使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。从功能的角度来看,WCF完全可以看作是ASMX.Net RemotingEnterprise ServiceWSEMSMQ等技术的并集。

 

SOA体系:

将原来的DAL —— BLL —— Client 中加入Service 层,变为:DAL —— BLL —— Service —— Client

 

WCF前的分布式计算技术特性和应用领域:

要构建基本的可互操作的 Web 服务,最佳选择是 ASP.NET Web 服务(ASMX)。要连接两个基于 .NET Framework 的应用程序,选择 .NET Remoting。如果应用程序需要分布式事务和其他更高级的服务,其创建者一般会使用企业服务Enterprise Sevices,即COM+ 的继任者。要构建Web 服务安全,使用WS-Addressing WS-Security规范,开发人员可以构建采用WSE3.0的应用程序。而要创建基于消息的排队式应用程序,基于 Windows 的开发人员则应使用 Microsoft 消息队列(MSMQ)

 

服务均由三个部分构成: 

1.      服务类:采用 C# VB.NET 或其他基于 CLR 的语言编写,实现一个或多个方法。通常包括服务契约、操作契约和数据契约。 

2.      宿主:一种应用程序域和进程,服务将在该环境中运行。ASP.NETEXEWPFWindows FormsNT ServiceCOM+作为宿主(Host) 。

3.      终结点:服务暴露出来的地址,由客户端用于访问服务。通常提及的概念就是ABC,即地址、绑定和契约的第一个字母的简称。 终结点中重要的概念就是绑定,它是实现通信的关键部分。这里定义消息通讯的协议包括HTTPTCPUDPMSMQ等,用户可以根据自己的需要定义。

 

契约:

1.       服务契约

可以运用于类和接口中。建议使用接口进行。第一、可以实现耦合性,由于服务契约是客户端和服务端共享的,如果一方实现有了变化,那么另一方必须改变。第二、对于接口来说可以进行多重实现,而类不可以。

 

2.       操作契约

(1)       服务契约中的所有方法都应该拥有OperationContractAttribute

(2)       使用MessageParameterAttribute来控制参数或者返回名称,比如:

[OperationContract]

void SaveLink([MessageParameter(Name="LinkItem")]LinkItem item);

 

3.       数据契约

(1)       WCF服务编程中我们知道,服务契约定义了远程访问对象和可供调用的服务操作方法,数据契约则是定义服务端和客户端之间要传送的自定义数据类型。在WCF项目中,声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送。类只有声明为DataContract,该类型的对象才可以被传送,且只有类的属性会被传送,需要在属性生命前加DataMember声明,这样该属性就可以被序列化传送。默认情况属性是不可传递的。类的方法不会被传送。

(2)       DataMemberAttribute,明确成员是否参与序列化,应用于域(fields)或属性(properties)。可以指定排列顺序,缺省按照字母表顺序排列,能够显式提供Name, IsRequired。最好应用在属性上,比如:

[DataMember(Name = "Id", IsRequired = false, Order = 0)]

public long Id

{

get { return m_id; }

set { m_id = value; }

}

(3)       对于复杂类型,使用DataContractSerializer是一种较好的方法

(4)       [DataContract(Name="LinkItem”, Namespace="http://schemas.thatindigogirl.com/samples/2007/07")]

public class LinkItem{…}

总是要提供命名空间Namespace