WCF学习笔记(一)

WCF 简介
Windows Communication Foundation (WCF) 是.NET Framework 的扩展,用来创建互连的系统。WCF 提供了创建安全的、可靠的、事务服务的统一框架,WCF 整合和扩展了现有分布式系统的开发技术,如Microsoft .Net Remoting、Web Services、Web Services Enhancements (WSE)等等,来开发统一的可靠系统。WCF 框架可以实现SOA架构的松散耦合的应用程序,
 

WCF 简化了构建SOA架构应用的工作,同时通过统一Enterprise Services、Messaging、.Net Remoting、Web Services、WSE 等技术,降低开发复杂度。WCF服务可以通过属性Attribute进行配置,提高灵活性和效率,支持大量的Web Services标准,如XML、XSD、SOAP、Xpath、WSDL等标准和规范,如WS-Addressing、WS-Policy、WS-Security、WS-Trust、WS-Secure、WS-Reliable Messaging、WS-Atomic Transaction、WS-Coordination等等。

而要理解WCF,你首先要理解WCF基本的组成部分,分别为:

  • Message  --- Soap Message, WCF不仅支持XML格式,而且还支持更加高效的Binary格式
    • Header   --- Message的Header,通常是附属信息,可以零个或多个
    • Body  --- Message的Body,通常是主题信息,可以零个或多个
  • Channel  --- 传输Message的通常,可以建立多个Channel,通常包括下面四部分信息,但一般不用我们指定,而是在配置Service/Endpoint中指定
    • Security  --- 传输安全性
      • Message Securty  --- Message的安全性,通常验证方式有Windows Authentication 或 X.509 或 Custom
        • Authentication  --- 验证
        • Integrity  --- 消息完整性
        • Confidentiality  --- 消息机密性,加密解密
        • Auditing  --- 审核
      • Transport Security  --- Transport的安全性
        • Https  --- 针对Http来说的安全传输
        • Other
    • Interoperability  --- 交互性,我的理解是,可以替代的服务类型
      • WebService
      • WSE
      • .Net Remoting
      • Enterprise Service
      • MSMQ
      • Other
    • Message pattern  --- Message的传输方式
      • Simplex  --- 单向传输,如A-->B
      • Duplex  --- 双向传输,如A<---->B,A先发送信息到B,B返回一个状态,然后A再发Message,然后B Response
      • Request-Respose  --- 要求/回复,A-->B,B-->A
    • Transport  --- 传输类型,Message是通过什么形式传输的
      • Http --- 无需保存连接状态
      • Tcp --- 需要保存连接状态,在Exchange Data的时候,会维护一个State
      • MSMQ  --- 通常用于需要可靠的Message传输的时候
      • Named Pipes  --- 通常用于单个PC的不同进程间通信
  • Service
    • Service
      • Contract  --- 契约
        • Data Contract  --- 数据契约,告诉程序该数据可以用于WCF传输,通常用来指定我们自定义的Model对象,是serializable的一种类型,命名空间为System.Runtime.Serialize。
        • Service Contract  --- 服务契约,告诉程序这是该一个WCF服务
        • Operation Contract  --- 操作契约,告诉程序,这是该Service对外暴露的可以执行的操作
      • Implementation  --- Operation Contract的具体实现
    • Endpoint --- 在外界看来,服务的连接接地址
      • Address  --- 服务的具体地址,根据Transport类型,可以是Http,Tcp等
      • Binding  --- 下面的图标是Binding的不同类型
      •   image
      • Contract  --- 对外暴露的接口
    • Behavior  --- Service在执行时,要执行的一个行为,比如安全验证
      • Throttling  --- 决定同一时间一个Service可以使用的Thread数量、Service的实例数,传递的Message数量
      • Security  --- 决定Service的安全特性
      • Instancing  --- 决定Service实现类的可以创建的实例数
        • PerCall  --- 客户端的每次Request都会产生一个InstanceContext
        • PerSession  --- 根据每个客户端的Session来产生一个InstanceContext,并且和这个Session有相同的生命周期
        • Single  --- 单例模式
      • Error Handling  --- 但Service遇到异常并且需要返回信息时的处理方式
      • Concurrency  --- 控制一个InstanceContext可以跨多少个线程
        • Multiple  --- 可以跨多个线程
        • Single  --- 只能在单行程内执行
        • Reentrant  --- Each instance of the service can only process messages one at a time but can accept re-entrant operation calls
      • Transactions  ---  决定Service是否可以接受并执行来自客户端的事务.注意事务是客户端创建的,因此事务的完成与否由客户端决定,当然生命周期也是如此。
      • Custom  --- 自定义行为
    • Host  --- WCF的寄宿主,即运行Service的地方
      • Console Application
      • Web Application
      • WinForms Application
      • IIS
      • Service  

 

WCF 通信模型

WCF 遵从客户/服务端模型在应用程序间建立通信,客户端程序通过服务端公布的Endpoints端点来直接访问服务。Endpoints 是发送或接收消息的一个地址,每一个服务WCF Service可以有多个Endpoints。



 
WCF 服务由如下几个主要组件组成,下图表示了这些组件如何进行交互:
  • Service Contract
  • Operation Contract
  • Data Contract
  • Data Member




Service Contract
Service Contract 定义了会话中的消息方向和类型,用一个接口或类订阅WCF的Service Contract。Service Contract 是外部应用程序访问服务方法的一个通道,在一个服务中至少应该有一个ServiceContract。
 
例如:
 
    [ServiceContract]
    public interface IWCFForumService
    {
        [OperationContract]
        string GetMessage(int messageID);
 
        [OperationContract]
        IEnumerable GetMessageInfo(int messageID);
    }
 
上述接口的ServiceContract attribute 表明这是一个Service Contract,同时Service Contract定义了服务中可用的方法,WCF 服务中的方法与Web services 中的方法比较类似。IWCFForumService 是Forum 的Service接口,公布了服务中所有的OperationContract 方法给外部系统。
 
Operation Contract
Operation Contract 定义了WCF 服务中提供给外部系统访问的方法。OperationContract attribute 需要应用到这些方法上,就像Web services 中的Web method 一样。Operation Contract 的示例代码参考IWCFForumService 接口定义。
 
Data Contract
Data Contract 定义了一系列DataMember,作为一个组合类型(Composite type)在ServiceContract 中使用。通过应用DataContract attribute给一个类来定义Data Contract,Data Contract需要通过serializer 进行序列化。通过应用DataMember attribute 到成员变量上,DataMember 成员变量需要序列化。
 
 例如:

    [DataContract]
    public class MessageInfo
    {
        private int _messageID;
        private DateTime _postedDate;
        private string _message;
        [DataMember]
        public int MessageID
        {
            get { return _messageID; }
            set { _messageID = value; }
        }
        [DataMember]
        public DateTime PostedDate
        {
            get { return _postedDate; }
            set { _postedDate = value; }
        }
        [DataMember]
        public string Message
        {
            get { return _message; }
            set { _message = value; }
        }
    }

 
Data Member
DataMember attribute 可以应用到私有成员变量(Private member)上,需要序列化和反序列化,可以访问存取。DataMember的用法参考上面MessageInfo 的定义。

你可能感兴趣的:(学习笔记)