化零为整WCF系列文章索引
作者:webabcd
介绍
WCF (Windows Communication Foundation) :契约, 绑定, 宿主, 异常处理, 异步调用, 双向通讯, MTOM, 流数据传输, 序列化, 实例模型, 会话状态, 并发, 限流, 事务, 安全, 可靠性消息, 消息队列, WCF创建REST, AJAX调用WCF
1、化零为整WCF(1) - 不能免俗,我也从Hello开始
介绍
废话不多说,俗也不能免,我也从Hello开始。
2、化零为整WCF(2) - 契约Contract(ServiceContract、OperationContract、DataContract、ServiceKnownType和DataMember)
介绍
服务契约(ServiceContract),操作契约(OperationContract),数据契约(DataContract),服务已知类型(ServiceKnownType),数据成员(DataMember)。
3、化零为整WCF(3) - 绑定Binding(basicHttpBinding和netTcpBinding)
介绍
Http以basicHttpBinding为例,Tcp以netTcpBinding为例。
4、化零为整WCF(4) - 异常处理(Exception、FaultException、FaultException、IErrorHandler)
介绍
一般Exception的处理,FaultException和FaultException
5、化零为整WCF(5) - 宿主Hosting(宿主在IIS, Application, WAS, WindowsService)
介绍
WCF服务可以宿主在IIS, Application, WAS, WindowsService。本文以宿主在WindowsService为例。
6、化零为整WCF(6) - 消息处理(异步调用OneWay, 双向通讯Duplex)
介绍
通过操作契约的IsOneWay参数实现异步调用,基于Http, TCP, Named Pipe, MSMQ的双向通讯。
7、化零为整WCF(7) - 消息处理(使用消息传输优化机制 - MTOM)
介绍
MTOM(Message Transmission Optimization Mechanism) - 消息传输优化机制。本文以web方式上传大文件为例。
8、化零为整WCF(8) - 消息处理(使用流数据传输文件)
介绍
使用流数据传输文件,减少内存开销。
9、化零为整WCF(9) - 序列化(DataContractSerializer, XmlSerializer, DataContractJsonSerializer, SoapFormatter, BinaryFormatter)
介绍
本文分别以DataContractSerializer, XmlSerializer, DataContractJsonSerializer, SoapFormatter, BinaryFormatter为例。
10、化零为整WCF(10) - 实例模型(InstanceContextMode)
介绍
ServiceBehavior
InstanceContextMode.PerCall - 新的 System.ServiceModel.InstanceContext 对象在每次调用前创建,在调用后回收。
InstanceContextMode.PerSession - 为每个会话创建一个新的 System.ServiceModel.InstanceContext 对象。
InstanceContextMode.Single - 只有一个 System.ServiceModel.InstanceContext 对象用于所有传入呼叫,并且在调用后不回收。如果服务对象不存在,则创建一个。
11、化零为整WCF(11) - 会话状态(Session)
介绍
ServiceContract
SessionMode.Allowed - 指定当传入绑定支持会话时,协定也支持会话(默认值)
SessionMode.Required - 指定协定需要会话绑定。如果绑定并未配置为支持会话,则将引发异常
SessionMode.NotAllowed - 指定协定永不支持启动会话的绑定
OperationContract
IsInitiating - 获取或设置一个值,该值指示方法是否实现可在服务器上启动会话(如果存在会话)的操作。
IsTerminating - 获取或设置一个值,该值指示服务操作在发送答复消息(如果存在)后,是否会导致服务器关闭会话。
12、化零为整WCF(12) - 并发和限流(Concurrent和Throttle)
介绍
ConcurrencyMode.Single:单线程并发模式。系统自动加锁,无并发问题
ConcurrencyMode.Reentrant:可重入的单线程并发模式。有可重入(回调)操作时,此模式才会生效,从回调返回的线程会进入队列尾部排队
ConcurrencyMode.Multiple:多线程并发模式。系统不会自动加锁,有并发问题
WCF(Windows Communication Foundation) - 限流(Throttle):
maxConcurrentCalls - 服务中同时存在的最大活动消息数,默认值为 16
maxConcurrentInstances - 服务中同时存在的最大服务实例数,默认值为 Int32.MaxValue
maxConcurrentSessions - 服务中同时存在的最大会话数,默认值为 10
13、化零为整WCF(13) - 并发控制(锁)(Mutex, Semaphore, Monitor, Lock, ThreadPool, Interlocked, ReaderWriterLock)
介绍
以ConcurrencyMode.Multiple并发模式及InstanceContextMode.Single实例模型为例(此时有并发问题),介绍如何做并发控制,即各种锁的使用(Mutex, Semaphore, Monitor, Lock, ThreadPool, Interlocked, ReaderWriterLock)
14、化零为整WCF(14) - 事务(Transaction)
介绍
对契约方法使用TransactionFlowAttribute声明(设置TransactionFlowOption参数),以指定服务操作的事务流策略
对服务方法是用OperationBehaviorAttribute声明(设置TransactionScopeRequired参数),以指定方法是否在事务范围(TransactionScope)内执行
配置host和client的binding节点的transactionFlow属性,以指定绑定是否支持流事务
15、化零为整WCF(15) - 可靠性消息(ReliableMessaging)
介绍
通过重试的方法来保证消息的可靠传递,默认为8次
当配置了“有序传递”的时候,客户端和服务端会开辟缓冲区,服务端缓冲区在接到所有客户端发来的消息后,按照客户端调用的顺序排序各个消息,然后有序地调用服务端
16、化零为整WCF(16) - 消息队列(MSMQ - MicroSoft Message Queue)
介绍
netMsmqBinding的binding属性配置如下:
ExactlyOnce - 确保消息只被投递一次
Durable - 消息是否需要持久化
TimeToLive - 消息过期并且从原有的队列移动到死信队列的时间
ReceiveRetryCount - 将消息传输到重试队列前尝试发送该消息的最大次数
MaxRetryCycles - 重试最大周期数
RetryCycleDelay - 重试周期之间的延迟
ReceiveErrorHandling - 指定如何处理错误的消息
DeadLetterQueue - 指定所使用的死信队列的类型
CustomDeadLetterQueue - 本地自定义死信队列的URI
17、化零为整WCF(17) - 安全(Security)
介绍
本文以用户名和密码做验证,通过X.509证书做加密为例
18、化零为整WCF(18) - Web编程模型(WCF创建REST, AJAX调用WCF)
介绍
使用WCF创建REST服务,使用asp.net ajax调用WCF服务
System.ServiceModel.Activation.WebServiceHostFactory - 用于承载使用 WCF Web 编程模型的服务
System.ServiceModel.Activation.WebScriptServiceHostFactory - 能够向服务中自动添加 ASP.NET AJAX 终结点而无需进行配置
19、化零为整WCF(19) - WCF 4.0 新特性
介绍
WCF(Windows Communication Foundation) - WCF 4.0 新特性
- 简化配置(Simplified configuration) - 根据 baseAddresses 生成默认 endpoint;在应用程序的级别上指定默认的 Binding 配置和 Behavior 配置
- 不需要 .svc 的物理文件,而直接在 IIS 上托管 WCF 服务
- 标准终结点(Standard Endpoint) - 内置了 8 个已经定义好相关配置的标准终结点(分别为 mexEndpoint, announcementEndpoint, discoveryEndpoint, udpAnnouncementEndpoint, udpDiscoveryEndpoint, workflowControlEndpoint, webHttpEndpoint, webScriptEndpoint)
- 通过标准终结点中的 webScriptEndpoint 来提供 ajax 服务
- 对 REST 服务支持的增强
- 对路由服务,工作流服务,字节流编码,非破坏性队列接收,服务发现的支持
OK
[源码下载]