随笔分类 - WCF编程
摘要:一、概述 传入的客户端调用消息会分发给Windows I/O线程池(线程默认为1000)上的服务实例。多个客户端可以发起多个并发的调用,并且服务可以在多个线程上处理这些请求。如果传入的调用分发给同一个服务实例,就必须对内存中的服务状态提供线程安全的访问方式,否则,可能存在错误的风险。客户端回调时...
阅读全文
摘要:一、投票与提交 虽然WCF负责事务传播及两阶段提交协议的管理工作,但是 她不知道事务是否应该提交或终止。这需要根服务告诉WCF应该何时启动两阶段提交协议、是提交还是终止。WCF提供了两种编程模式来对事务的结果进行投票,即声明式和显式模式。 声明式投票 WCF可以代替服务自动完成提交或终止事务的...
阅读全文
摘要:一、设置环境事务 默认情况下,服务类和操作没有环境事务,即使客户端事务传播到服务端也是如此。 尽管强制事务流从客户端传播过来,但服务端的环境事务依旧为null。为了启用环境事务,每个操作必须告诉WCF启用事务。为了解决这个问题,WCF提供了OperationBehaviorAttribute的TransactionScopeRequired属性: // 指定服务方法的本地执行行为...
阅读全文
摘要:一、概述 .NET2.0在命名空间System.Transactions下提供了Transaction类,它表示所有.NET事务管理器使用的事务。 [Serializable]
public class Transaction : IDisposable, ISerializable
{ //...... public static Transaction Curr...
阅读全文
摘要:一、事务传播概述 WCF可以跨越服务边界传递事务。这可以让服务参与到客户端事务里,客户端还可以在同一个事务里调用多个服务。客户端本身不一定是WCF服务。客户端事务是否传播到服务端可以通过绑定和操作契约契约的设置来控制。 我们把能够支持客户端事务传播给服务端的绑定称为“事务感知”型绑定。 只有TCP、IPC和WS绑定支持事务传播。 二、事务流与绑定 默认情况下,事...
阅读全文
摘要:一、事务协议 总体来说,WCF开发人员不需要涉及事务协议与管理器。我们应该依赖WCF来选择相应的事务协议和管理器,重点关注业务逻辑的实现。 WCF是根据事务范围里的参与个体来选择事务管理协议的。事务管理协议之间的差别与远程调用、通行协议,以及跨越的系统边界有关。 可选择的管理协议如下: 轻量级事务协议 这个协议只在本地同一个应用程序域内的上下文环境里管理事务,他不...
阅读全文
摘要:一、事务概述 维护系统一致性和正确地处理错误恢复挑战的最佳方式是使用事务。 一个事务就是一个复杂操作的集合,这个集合中任何一个操作的失败都会引起整个集合的失败。 尽管在事务进行时系统被允许暂时出于不一致的状态,但是一旦事务结束,系统一定会处于一直的状态。 事务资源 事务编程需要资源(如数据...
阅读全文
摘要:一、错误传播 服务需要向客户端报告特定错误,当WCF默认的错误屏蔽方法并不包含这一实现。另一个重要的问题与传播到客户端有关,即由于异常是针对特定技术的,因此无法跨越服务边界而被共享。要实现无缝的互操作性,就需要将基于特定技术的异常映射为某种与平台无关的错误信息。这种表现形式就是所谓的SOAP错误...
阅读全文
摘要:一、错误概述 不管是哪一种操作,在任意时刻都可能出现不可预期的错误。问题在于我们应该如何将错误报告给客户端。异常和异常处理机制是与特定技术紧密结合的,不能跨越边界的。此外,如果有客户端来处理错误,必定会导致耦合度增加。通常,错误处理应该是本地的实现细节,并不会影响到客户端。在设计良好的应用程序中...
阅读全文
摘要:一、流操作概述 在默认情况下,当客户端调用服务时,服务只有在接收到完整的消息后才会被调用,同样,客户端只有在包含了调用结果的返回消息被完整接受时,才会解除对它的阻塞。 对于数据量小的消息,这种交换模式提供了简单的编程模型,因为接收消息的耗时较之处理消息本身而言是微不足道的。然而,一旦需要处理数据量较大的消息,如包含了多媒体内容、大文本或数据块的消息,如果每次都要等到完整接收消息之...
阅读全文
摘要:一、事件概述 基础的WCF回调机制并不能阐明客户端与服务之间交互的本质。双向回调的规范使用可以通过事件来完成。客户端发生的相关事项都可以通过事件通知客户端或者多个客户端。事件可能源于直接的客户端调用,也可能来源于服务监听器。激活事件的服务称为发布者,而接受事件答得客户端则称为订阅者。如下图所示: 与回调操作相比,WCF更重视对事件的运作。从本质讲,事件代表了发布者与订阅者之间更...
阅读全文
摘要:一、回调操作概述 WCF支持服务将调用返回给它的客户端。在回调期间,许多方面都将颠倒过来:服务将成为客户端,客户端将编程服务。回调操作可以用在各种场景和应用程序中,但在涉及事件或者服务发生时间需要通知客户端时,显得特别有用。 回调操作通常被认为是双向操作。并非所有的绑定都支持回调操作,只有在具有了双向能力的绑定时,才支持回调操作。比如,HTTP协议本质上是与与连接无关的,所以他不...
阅读全文
摘要:一、单向操作概述 WCF提供了单向操作,一旦客户端调用,WCF会生成一个请求,但没有相关的应答信息返回给客户端。所以,单向操作是不能有返回值,服务抛出的任何异常都不会传递给客户端。 理想情况下,一旦客户端调用了一个单向操作,它只会在要求调用的一瞬间被阻塞。事实上,单向调用不等于异步调用。当单向调用到...
阅读全文
摘要:一、调用操作概述 WCF除了支持经典的服务端-客户端的请求/应答操作外,还提供了对其他操作类型的内建支持,包括:即发即弃的单向调用;允许服务将调用返回给客户端的双向回调;允许客户端或服务器处理大量负荷的流操作。 二、请求/应答操作 在先前介绍的实例中,契约中的操作均为请求/应答类型。在这些类型中,客户端以消息形式发出请求,它会阻塞客户端直到收到应答消息。应答的默...
阅读全文
摘要:一、性能概述 WCF服务的性能取决于很多因素。出了CPU、RAM和网络性能等常见的因素外,实例上下文模式、并发模式、数据契约的设计或使用的绑定等与WCF有关的因素都起着重要的作用。 实例上下文模式用来控制服务对象的实例化行为有PerCall、PerSession和Singleton三种模式可供选择。 绑定决定了传输协议和编码格式。此外,通过绑定可以...
阅读全文
摘要:一、服务实例的生命周期概览 我们已经直到,通过显式调用Close方法或等待默认的超时时间到来,都可以释放服务实例。但是,在会话连接里,经常需要按一定顺序调用方法。 二、分步操作 会话契约的操作有时隐含了操作调用的顺序。WCF提供了一种被称之为分步操作(Demarcating Operation)的方法,以应对服务契约的操作需要指定执行顺序的情况。分步操作是使用O...
阅读全文
摘要:一、实例上下文模式概述 实例上下文(IntanceContext Mode)表示服务端的服务实例与客户端的服务代理的绑定方式。 在实例化服务器对象时,WCF采用了3种不同的模式:单调(Per-Call)模式,会话(Per-Session)模式和单例(Single)模式.其中会话模式是默认的。 ...
阅读全文
摘要:一、绑定行为概述 为了支持服务端的其它本地特性,WCF定义了行为的概念。行为就是服务的本地特性,不会影响服务的通信模式。客户端并不知道服务端行为,所以行为不会出现在服务的绑定和发布的元数据中。说下WCF下“契约(Contract)”和“行为(Behavior)”的区别:契约是涉及双边的描述(契约是服...
阅读全文
摘要:一、绑定概述 WCF提供了一个编程框架,可以抽象化服务创建的复杂过程。绑定允许开发人员将精力集中在问题本身上,而无需考虑如何创建允许系统运行的架构,因为WCF已经创建了架构。 绑定类型是开发人员控制WCF程序与其它消息交互的主要手段。从功能上看,绑定创建了通道工厂或通道侦听器的堆栈对象。在服务模型层和通道层中,绑定在服务模型层是可见的,但它创建的对象作用于通道层。 WCF通道模型: 绑...
阅读全文
摘要:一、契约的基本概念 契约是消息参与者之间的约定。在SOA架构中,契约提供了服务通信所必需的元数据。契约用来定义数据类型,操作,消息交换模式和消息交换使用的传输协议。契约通常是在标准化平台中使用与编程语言无关的XML格式发布的。这样做的好处是:允许契约涉及的各方都能够使用和理解契约。在WCF中,服务元...
阅读全文