上一个系列我们主要描述什么是绑定?绑定是预先设置的信道栈。它们代表了在客户端和服务端之间的线上契约。每个绑定由通信中涉及的传输,编码和协议确定。WCF使用绑定为多样化通信场景集合配置信息。本系列我们将描述WCF行为,包括服务行为、操作行为和安全行为。服务行为包括服务有一个实例的并发、多个实例并发以及多线程访问;操作行为中有涉及WCF中相对常见和重要的WCF事务处理方面内容,需要大家重点了解和掌握。

[第1篇] 基础

行为是WCF影响运行时操作的类。行为作为WCF运行时被调用,在客户端和服务端运行并作为消息在两者之间流转。因为行为运行在这些重要的时间,它们被用来实现很多WCF的内建特性。它们也是一个重要的自定义扩展点。

[第2篇] 并发和实例(服务行为)

并发是一个多少个任务可以同时执行的度量,以任务(请求,工作,事务,以及类似的)的形式度量。执行时间是一个任务多长时间完成的度量,以时间(毫秒,秒,其他的时间单位等)度量。吞吐量是在一个指定时间里可以完成多少个任务的度量,以任务/时间(请求/秒, 事务/分,等等)的形式度量。吞吐量是关于并发和执行时间的函数。

[第3篇] 不支持会话的绑定的默认并发和实例

列表5.1 显示了一个没有定义任何并发或实例行为的服务,它指导WCF使用默认值,ConcurrencyMode.Single和InstanceContextMode.PerSession.当使用这些设置和一个不支持会话的绑定时,比如basicHttpBinding,WCF创建为每个它接收到的请求创建一个新的服务实例并在它自己的线程里执行代码。它在返回前会等待5秒。

[第4篇]一个单一实例中的多线程

默认的InstanceContextMode行为设置指导WCF为每个请求创建一个新的服务实例。然后在很多情况下,这不是最好的解决方案。例如,如果一个服务有一个代价很高的例行初始化(比如,一个构造器从一个数据库读取数据或者创建一个大的内存结构),它对每个服务请求的实例创建都不是很高效。为了创建一个被当前线程共享的单一服务实例,InstanceContextMode.Single应该与ConcurrencyMode.Multiple结合使用。InstanceContextMode.Single意味着只能有一个实例被创建,而ConcurrencyMode.Multiple设置指导WCF在那个实例中同时执行多个线程。这可以提供一个重要的扩展性改进,但是服务代码必须处理同步来保护TLS(本地线程空间)。

[第5篇] 实现一个单例

有很多情形需要一个服务对应一个服务实例,而且实例仅可以运行一个线程。任务应该严格的按照FIFO(先进先出)顺序执行,没有并发。尽管这个严重降低吞吐量,这有利于那些状态在所有调用者间共享且它们没有足够的锁定机制存在的场景。

[第6篇] 会话级别的实例

会话在分布式应用程序中广泛用于维护每个用户的状态。在站点或者基于站点的应用中,将每个用户的状态存储于会话中很常见。这这些情况中,用户和会话间有一个1:1比例。WCF以一个类似的概念支持服务。使用InstanceContextMode.PerSession设置,WCF可以直接为每个会话创建一个服务实例。

[第7篇]控制并发实例的数量

默认情况下,WCF 宿主将会启动尽可能多的实例来处理请求消息。如果一个服务的实例和并发行为并没有确定,WCF将会为每个进入的请求创建一个服务实例同时将按照需要分配线程来反应请求。总体来说这是一个对性能和扩展性都很好的解决方案因为服务将会最大化扩展硬件性能。

[第8篇] 控制并发调用的数量

当InstancingMode设置成Single时,WCF在宿主内创建一个单一的实例,不考虑有多少客户端被创建。当ConcurrencyMode设置成Multiple时,WCF为每个请求创建一个线程(取决于系统上限)以实现服务方法的并行执行。为了减少这个,maxConcurrentCalls行为控制有多少个并发调用可以激活。

[第9篇] 控制并发会话的数量

当InstancingMode被设置成PerSession时,WCF为每个连接到服务端的会话创建一个实例。为了控制连接到一个服务端的会话数量,可以使用maxConcurrentSessions行为。当达到最大值时,下一个客户端尝试创建的会话将会阻塞直到另外一个会话关闭。这个设置对限制可以连接到服务端的用户(或客户端或服务器端)的数目是很有用的。

[第10篇]导出并发布元数据(服务行为)

一个服务的ABCs-它的地址,绑定和契约-是以元数据的形式表示的以便于潜在的客户端知道到哪里,该如何与谁去通信。信息统称为服务元数据。服务行为元数据是大多数程序员遇到的第一个行为,因为当你创建WCF工程时它被引用于由Visual Studio 2008生成的配置文件里。这个行为与一个元数据终结点一起工作以便于元数据可以被客户端访问。

[第11篇]可信赖会话

WCF是微软在SOA (面向服务)领域的一款利器,先不谈WCF,我们来聊聊SOA。SOA 全称是Service Oriented Application, 也是由面向过程(汇编,C),面向对象(C++, C#, java),面向组件,面向内容…发展过来的。

[第12篇] 实现事务(操作行为)

有两个场景一般用作事务的参考。多步骤商业过程是典型跨度分,天,月的长时间运行过程。它们可以涉及多个组织和基于人的工作流。短期运行事务是那些在几秒钟完成并很少有外部依赖的商业操作。尽管它们都有定义的很好的接口和确定的工作流,它们是根本不同的事物。WCF支持短期运行的事务。它通过借助.NET和Windows基础结构来实现运行在只有微软环境平台的事务同时通过使用WS-*标准事务来支持跨平台。

[第13篇]在WCF一个服务内部的事务操作

事务化的服务操作只能作为一个整体成功或失败。它们以一个整体被初始化,假设结果将会是一致的,无论操作最终是成功还是失败。图片5.9 使用伪代码描述这个行为。客户端打开一个到服务端的连接然后调用它的Transfer 方法。Transfer 执行一个借入,一个存入,然后标记事务完成。客户端在事务语义中不涉及。

[第14篇] 事务-跨操作事务流

当在分布式系统中工作时,事务有时必须要跨越服务边界。例如,如果一个服务管理客户信息而另一个服务管理订单,一个客户提交一个订单并想产品可以发送到一个新的地址,系统将需要调用每个服务上的操作。如果事务完成,用户将会期待两个系统上的信息都被合适的更新。

[第15篇]事务之选择一个事务协议-OleTx 或者WS-AT

事务管理器负责协调多个部分间的工作并通过资源管理器提交工作。资源管理器负责处理可信赖,持续存储。取决于使用的资源和服务或应用跨越的边界,WCF将使用三个事务管理器中的一个来完成事务处理。轻量级事务管理器(LTM)用来在一个应用程序域中管理资源。核心事务管理器(KTM),仅仅存在于Vista 和Windows Server 2008 系统中,用来管理文件系统和注册表资源的事务。分布式事务管理器(DTC)用来管理跨程序,进程或者机器边界的事务。应用程序不控制具体使用哪一个事务管理器;WCF将会选择最合适的事务管理器并在没有应用程序干预的情况下按需要逐步扩大。

[第16篇] 事务之事务服务行为

定义在操作层的行为TransactionScopeRequired和TransactionAutoComplete在这一章的先前部分描述了。在服务层,有两个额外的行为需要考虑: TransactionIsolationLevel和TransactionTimeout

[第17篇] 实现自定义行为

自定义行为可以在WCF创建运行时和消息处理管道时让你在重要的地方插入代码。行为可以添加到代码中,通过属性或配置文件手动实现服务描述。在所有的情况中,代码可以做一些辅助动作,比如在一个目录中寻找信息或者为了审计的目的记录数据。

[第18篇] 为服务终结点行为实现一个消息检测器

列表5.23通过将一个终结点发送的和接收的每条消息打印出来来实现一个日志功能。代码显示了从一个终结点行为调用的消息检测器。这也是自定义寄宿服务如何将终结点行为手动添加到服务描述中去。

[第19篇]以属性为服务操作行为暴露一个参数检测器

列表5.24实现一个使用正则表达式验证参数的行为。它可以应用到任何操作上并允许开发人员定义一个正则表达式和当参数不合法时用来返回错误信息的消息。

[第20篇] 通过配置文件暴露一个服务行为

列表5.25 实现了对在服务端配置中安装的软件授权码的一个验证行为。如果它不存在或者它不合法,服务将不会启动。它显示了服务运行时创建的用来验证配置信息的一个终结点行为。它也显示了当服务运行时创建时调用的一个行为扩展和扩展是如何将行为加入到服务运行时的。结果就是一个自定义行为在配置文件中(app.config 或者web.config)使用并被添加到服务运行时中以便于配置信息可以在服务启动时被验证。

[第21篇]安全行为

有一些重要的用来处理安全的行为。这些会在第八章”安全”中讲述,但是理解他们作为行为的作用是很值得的。

[第22篇]行为总结

行为是WCF架构中一个重要的扩展点。它们在客户端或者服务端运行时(runtime)被构造时以及每个服务调用时使用。当运行时启动时,它通过检测传递给ClientChannel的类型结构或者ServiceHost来寻找行为,然后在配置文件中寻找。行为也可以在代码中和在打开ServiceHost之前添加到ServiceDescription 对象中定义,或者通过在代码中使用属性,或者在配置文件中。

作者: DanielWise 发表于 2011-06-27 22:26 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"