天天看点

化零为整WCF系列文章索引

<a href="http://down.51cto.com/data/100781" target="_blank">[源码下载]</a>

化零为整WCF系列文章索引

介绍

WCF (Windows Communication Foundation) :契约, 绑定, 宿主, 异常处理, 异步调用, 双向通讯, MTOM, 流数据传输, 序列化, 实例模型, 会话状态, 并发, 限流, 事务, 安全, 可靠性消息, 消息队列, WCF创建REST, AJAX调用WCF

废话不多说,俗也不能免,我也从Hello开始。

服务契约(ServiceContract),操作契约(OperationContract),数据契约(DataContract),服务已知类型(ServiceKnownType),数据成员(DataMember)。

Http以basicHttpBinding为例,Tcp以netTcpBinding为例。

一般Exception的处理,FaultException和FaultException的抛出和处理,使用IErrorHandler处理异常。

WCF服务可以宿主在IIS, Application, WAS, WindowsService。本文以宿主在WindowsService为例。

通过操作契约的IsOneWay参数实现异步调用,基于Http, TCP, Named Pipe, MSMQ的双向通讯。

MTOM(Message Transmission Optimization Mechanism) - 消息传输优化机制。本文以web方式上传大文件为例。

使用流数据传输文件,减少内存开销。

本文分别以DataContractSerializer, XmlSerializer, DataContractJsonSerializer, SoapFormatter, BinaryFormatter为例。

ServiceBehavior 

InstanceContextMode.PerCall - 新的 System.ServiceModel.InstanceContext 对象在每次调用前创建,在调用后回收。 

InstanceContextMode.PerSession - 为每个会话创建一个新的 System.ServiceModel.InstanceContext 对象。 

InstanceContextMode.Single - 只有一个 System.ServiceModel.InstanceContext 对象用于所有传入呼叫,并且在调用后不回收。如果服务对象不存在,则创建一个。

ServiceContract 

SessionMode.Allowed - 指定当传入绑定支持会话时,协定也支持会话(默认值) 

SessionMode.Required - 指定协定需要会话绑定。如果绑定并未配置为支持会话,则将引发异常 

SessionMode.NotAllowed - 指定协定永不支持启动会话的绑定 

OperationContract 

IsInitiating - 获取或设置一个值,该值指示方法是否实现可在服务器上启动会话(如果存在会话)的操作。 

IsTerminating - 获取或设置一个值,该值指示服务操作在发送答复消息(如果存在)后,是否会导致服务器关闭会话。

ConcurrencyMode.Single:单线程并发模式。系统自动加锁,无并发问题 

ConcurrencyMode.Reentrant:可重入的单线程并发模式。有可重入(回调)操作时,此模式才会生效,从回调返回的线程会进入队列尾部排队 

ConcurrencyMode.Multiple:多线程并发模式。系统不会自动加锁,有并发问题 

WCF(Windows Communication Foundation) - 限流(Throttle): 

maxConcurrentCalls - 服务中同时存在的最大活动消息数,默认值为 16 

maxConcurrentInstances - 服务中同时存在的最大服务实例数,默认值为 Int32.MaxValue 

maxConcurrentSessions - 服务中同时存在的最大会话数,默认值为 10

以ConcurrencyMode.Multiple并发模式及InstanceContextMode.Single实例模型为例(此时有并发问题),介绍如何做并发控制,即各种锁的使用(Mutex, Semaphore, Monitor, Lock, ThreadPool, Interlocked, ReaderWriterLock)

对契约方法使用TransactionFlowAttribute声明(设置TransactionFlowOption参数),以指定服务操作的事务流策略 

对服务方法是用OperationBehaviorAttribute声明(设置TransactionScopeRequired参数),以指定方法是否在事务范围(TransactionScope)内执行 

配置host和client的binding节点的transactionFlow属性,以指定绑定是否支持流事务

通过重试的方法来保证消息的可靠传递,默认为8次 

当配置了“有序传递”的时候,客户端和服务端会开辟缓冲区,服务端缓冲区在接到所有客户端发来的消息后,按照客户端调用的顺序排序各个消息,然后有序地调用服务端

netMsmqBinding的binding属性配置如下: 

ExactlyOnce - 确保消息只被投递一次 

Durable - 消息是否需要持久化 

TimeToLive - 消息过期并且从原有的队列移动到死信队列的时间 

ReceiveRetryCount - 将消息传输到重试队列前尝试发送该消息的最大次数 

MaxRetryCycles - 重试最大周期数 

RetryCycleDelay - 重试周期之间的延迟 

ReceiveErrorHandling - 指定如何处理错误的消息 

DeadLetterQueue - 指定所使用的死信队列的类型 

CustomDeadLetterQueue - 本地自定义死信队列的URI  

本文以用户名和密码做验证,通过X.509证书做加密为例

使用WCF创建REST服务,使用asp.net ajax调用WCF服务 

System.ServiceModel.Activation.WebServiceHostFactory - 用于承载使用 WCF Web 编程模型的服务 

System.ServiceModel.Activation.WebScriptServiceHostFactory - 能够向服务中自动添加 ASP.NET AJAX 终结点而无需进行配置

OK

     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/343999,如需转载请自行联系原作者

继续阅读