WCF系列文章
烈火蜓蜻
山一程,水一程,身向榆关那畔行,夜深千帐灯。
风一更,雪一更,聒碎乡心梦不成,故园无此声。
展开
-
第一章 WCF简介
1. 什么是WCF如果你阅读本书的目的是为了解如何使用WCF构建分布式应用程序和服务,那么什么是WCF,为什么使用WCF?该如何使用WCF? 回答这些问题,让我们来回顾一下历史。(1)早期个人电脑时代的应用程序 个人电脑时代,业务解决方案由一套应用程序组合而成。一般会包含文字处理程序,电子表格处理程序,和数据库套件。有经验用户能够把业务数据存贮在数据库中,然后使用电子表格分转载 2012-06-14 16:26:31 · 1312 阅读 · 0 评论 -
第十二章 实现单向操作和异步操作(上)
当客户端程序调用一个单向操作后,客户端可以继续运行而不用等待服务完成该操作。你可以通过操作合约指定单向操作行为。达到该目的的最简单方式是在当以操作时设置Operation-Contract特性类的IsOneWay属性为true。在本章的练习中你将会看到具体的例子。单向操作的效果定义一个操作为单向操作包含多个暗示,其中最重要的暗示为具有单向操作特性的操作不能回传任何数据至客户端程序,转载 2012-06-16 19:22:45 · 1732 阅读 · 0 评论 -
第十二章 实现单向操作和异步操作(下)
使用消息队列消息队列是本书WCF异步技术中的最后一个出场的。消息队列可以为消息传输提供持久性、可靠性和事务性。甚至,发送消息的客户端程序与接受消息的服务可以不必同时运行。但使用该灵活性需要付出一定的代价,那就是消息队列只能支持单向传输。因此如果使用该技术实现客户端程序和服务并且服务需要向客户端发送响应消息时,需要仔细的设计。另外,消息队列比其他传输协议更慢,这是因为它所支持的可靠性和可持续转载 2012-06-16 19:25:15 · 956 阅读 · 0 评论 -
第十三章以更好的性能实现WCF服务(上)
前言良好的性能是大多数应用程序和服务的关键因素,你可以通过周密地设计,以及选择合适的特性以确保WCF服务维持其吞吐量,保持响应并具有可扩展性。到目前为止,这些技术包括事务(上,下),session状态,可靠地消息传递,以及异步操作(上,中,下)。还有其他一些影响性能的方面,比如安全(企业内部WCF的安全,因特网环境下WCF的安全)。如同我们在前面章节中讨论的那样,实现消息级别的安全转载 2012-06-16 19:27:11 · 8409 阅读 · 0 评论 -
第十三章以更好的性能实现WCF服务(下)
启用MTOM传输数据MTOM 是一种机制,用来以原始字节形式传输包含 SOAP 消息的较大二进制附件,从而使所传输的消息较小。一条SOAP消息经常由消息头和消息体构成;消息头提供地址,路由信息和安全信息;消息体提供数据,以及消息的负载。消息体由XML构成,包含在传输至服务的请求或者返回客户端程序的响应信息中。消息体信息的真正结构是由WSDL对操作的描述而指定,这些操作由你在服务中指定的操作转载 2012-06-16 19:27:59 · 4434 阅读 · 0 评论 -
第十四章 检测服务和路由消息(第二部分)
使用发现代理使用服务声明可以减少由Probe消息和ProbeMatch消息带来的网络流量,但是如果服务启动时客户端程序没有运行那么会发生什么?答案是客户端将失去通知消息因此不能发现服务,因为客户端不能连接到服务。解决方法是使用一个发现消息和声明的结合体;创建一个中间服务,该服务使用一个已知的地址侦听来自服务的声明消息并缓存这些声明消息。在客户端程序中,发送Probe消息至中间服务。中间服务转载 2012-06-16 19:29:13 · 1870 阅读 · 0 评论 -
第十五章 构建REST服务(第一部分)
通常企业使用两种架构实现Web服务:基于SOAP的服务和基于REST模型的服务。这两个架构依赖HTTP协议和因特网实现的寻址体系,但采取不同的方式使用它们。到目前为止,本书所有的练习都集中在SOAP模型上,这种架构使得Web服务的设计者关注服务的业务过程,并把这些业务过程对外公开为服务的操作。相比之下,REST模型则关注企业对外公布的数据,并实现一个允许客户端程序使用自身的逻辑访问并操作这些数据的转载 2012-06-16 19:31:09 · 1407 阅读 · 0 评论 -
第十五章 构建REST服务(第二部分)
通过REST Web服务更新数据REST Web服务提供了查询数据的操作以响应HTTP GET请求。但是,HTTP协议支持其他形式的请求,你可以利用这些消息类型提供操作以修改REST Web服务中的数据。最常见的情形是你使用HTTP POST请求创建新项目的操作,HTTP PUT请求更新现存数据的操作,使用HTTP DELETE请求定义删除项目的操作。注意,上述常规并不是强制的,你转载 2012-06-16 19:31:47 · 1945 阅读 · 0 评论 -
第十五章 构建REST服务(第三部分)
使用WCF数据服务到目前为止,本章中为你展示的例子都属于比较常见的情形。它们演示了如何使用WCF构建REST Web服务,这些服务使用WebGet和WebInvoke特性类手动定义一个对外公布数据的体系。如果你构建REST Web服务时采用ADO.NET实体框架读取数据,那么你可以使用WCF数据服务自动地完成大部分任务。使用由Visual Studio 2010提供的WCF Data服务模转载 2012-06-16 19:32:17 · 1274 阅读 · 0 评论 -
第十二章 实现单向操作和异步操作(中)
单向操作特别适用于"触发然后忘记"场景,在该场景中,客户端程序并不期望服务回传任何信息。但是,许多操作并不适用于这种情况,其向客户端程序返回数据。为了处理这些情况,WCF支持异步操作和IAsyncResult设计模式。在WCF中你可以使用两种方式实现IAsyncResult设计模式:在客户端 程序中异步调用操作;或在WCF服务中实现异步操作。IAsyncResult 设计模式并不是为WCF转载 2012-06-16 19:24:48 · 866 阅读 · 0 评论 -
第十四章 检测服务和路由消息(第一部分)
前言如果客户端程序向WCF服务发送一条请求消息,那么客户端通过端点发送该请求。如果你回想一下,端点由三部分组成:地址,绑定和合约。地址指明消息发送的目的地;绑定指明传输、格式、以及于与服务进行通讯所使用的协议;合约决定客户端可以发现的消息以及客户端期望的响应消息。多个服务可以实现同一个服务合约,或一个服务也有可能更改地址。如果客户端将服务特定的地址硬编码在客户端的配置文件中,那么如果服务发转载 2012-06-16 19:28:41 · 1451 阅读 · 0 评论 -
第十四章 检测服务和路由消息(第三部分)
实现路由路由适用于处理与监测服务稍微不同的场景。有时候需要从一个服务推送消息至另一个完全不同的服务以处理该消息。比如,当客户端程序发送请求至企业内部不同的WCF服务,但是所有这些请求实际上都首先通过前端的服务,该服务相当于WCF服务的防火墙。前端服务可以运行在企业外围网络的计算机上,而实际上处理请求的WCF服务可以寄宿在位于企业内部受保护的网络中。前端服务可以实现一个路由机制,通过转载 2012-06-16 19:29:47 · 1447 阅读 · 0 评论 -
第十六章 使用回调合约发布和订阅事件
到目前为止,本书中你看到的练习与例子都集中于C/S模型。在该模型中,一个服务器提供一个服务,该服务等待客户端主动发出的请求,接收到客户端的请求后,处理请求,然后选择性地向客户端程序发送响应。客户端程序是活动的参与者,提交请求并有效地决定了服务何时开始执行工作。然而这只是大多数的情况,WCF还支持其他的处理体系,比如点对点网络和客户端回调。在点对点场景中,没有被动的服务。所有参与者都是自主的转载 2012-06-16 19:33:24 · 2251 阅读 · 0 评论 -
WCF开发之异常与错误处理
对于WCF中的异常与错误处理我们必须先了解一个概念SOAP Faults,它实际上就是在服务端和客户端之间来传递错误信息的一种载体。• 公共语言运行时(CLR)异常无法跨越服务边界– 未捕捉异常最多到达服务通道(service channel)– 在报告给客户端之前必须要进行序列化• 所有的异常都被序列化为SOAP faults– 基于标准的,可互操作的– 给予SOAP转载 2012-06-16 20:09:00 · 7212 阅读 · 1 评论 -
第十四章 检测服务和路由消息(第四部分)
使用路由服务类实现手动路由无疑是非常强大的技术,但是常见的场景下你所希望的仅仅是,基于请求的某些特性而不是编写一些动态的算法以实现路由消息。为了处理这样的场景,WCF提供了RoutingService类,该类位于System.ServiceModel.Route命名空间下。给命名空间下的类图如下图所示:RoutingService类的目的在于:当消息达到时,基于内容实现路由转载 2012-06-16 19:30:32 · 1171 阅读 · 0 评论 -
第十一章 编写代码控制配置和通信(下)
前言WCF客户端通过代理对象可连接至服务。如果服务管理员禁用了服务元数据公布或者出于性能原因,那么在客户端可以通过代码创建ChannelFactory对象连接至服务并与服务通讯;甚至还可以通过扩展ClientBase抽样类与服务交互。使用上述两种方式时有一个前提那就是服务开发人员可以提供包含服务合约的组件。如果该前提也不存在,只要你拥有描述服务接受的SOAP消息和服务发送的响应消息的文档时转载 2012-06-14 17:01:42 · 926 阅读 · 0 评论 -
第二章 寄宿WCF服务
【摘要】本章先描述WCF service的工作原理;然后阐述寄宿WCF服务的各种方式;随后通过创建WPF程序和Windows Service来寄宿WCF服务;最后讲述支持WCF内置的各种绑定以及如何对一个WCF服务实现多重绑定。在第一章中,我们为你介绍了如何创建一个WCF服务,并将其部署到IIS上,然后通过客户端程序访问该服务。在本章中,我们将关注WCF工作的细节;各种寄宿WCF服转载 2012-06-14 16:30:06 · 3046 阅读 · 0 评论 -
第四章 保护企业内部的WCF服务
【摘要】安全是任何系统至关重要的一个方面,尤其当该系统由分布式的程序和服务组成;安全还是一个非常广泛的话题。因为这些原因,你应该考虑如何在不同的场景下实现系统的安全。这些关于安全的内容将通过三章内容进行一一介绍。在本章,我们把注意力集中在企业内部WCF服务的安全管理方面。在此场景中,运行WCF服务的服务端和客户端之间已经存在必要的信任关系;通过客户端访问该服务的用户都来自同一个安全域。WC转载 2012-06-14 16:35:53 · 1309 阅读 · 0 评论 -
第三章 构建健壮的程序和服务
【前言】捕获和处理异常是任何专业的应用程序的一个重要组成部分。在一个复杂的桌面程序上,许多场景都能产生一个异常,从程序错误、意外的事件、不完整的用户输入,到运行该程序一个或多个的硬件故障。在分布式环境中,异常的发生场景就更多了。因为网络的状态,在某些情况下,无论应用程序开发人员、还是网络管理员都无法控制网络的发挥功效或者维持其处于正常的工作状态。如果把应用程序访问第三方组件考虑在内,那么还转载 2012-06-14 16:32:50 · 1114 阅读 · 0 评论 -
第七章 维持会话状态和设置服务操作的顺序
在之前章节所完成的练习中,客户端调用WCF服务的一系列操作,但是这些操作的顺序并不重要;因此先调用一个操作然后再调用另外一个操作,均不会对彼此产生影响,因为这些操作是相互独立地。但在实际应用中,服务的操作可能需按照一定的顺序调用。比如,如果你在服务中实现了购物车功能,那么在没有将任何商品放进购物车之前,就执行结算和支付操作显然是没有意义的。按照一定的顺序调用操作会使你考虑在如何两次操作之间转载 2012-06-14 16:48:56 · 1830 阅读 · 0 评论 -
第八章 使用工作流实现服务
【前言】企业使用WCF服务的一个主要原因是通过包装现有的组件和程序构建面向服务的应用,这些应用通过不仅简单而且适应力很强地方式重用。这种策略为企业带来了非常大的灵活性,因为它可以简单地响应快速变化的业务需求、并迅速地创建或更改系统以适应这些需求。 许多企业采用的业务过程都由一系列明确的、并按照特定顺序执行的步骤组成。其中一些步骤可能涉及调用服务的操作,这需要确保WCF服务的操作顺序应当翻译 2012-06-14 16:50:07 · 5892 阅读 · 6 评论 -
第九章 事务支持(上)
【前言】大部分程序通常需要确保其操作数据的一致性。通过事务可以帮助达到该一致性。一个事务指一个组工作或一系列操作的原子性,原子性意味着要么全部成功地执行,要么当某个异常发生时全部均不执行。事务的典型例子是在两个银行账户之间转账,即从一个账户上扣除一定数量的金钱并将同样数量的金钱添加至另外一个账户。如果添加操作失败,那么扣除操作也必须复原,否则原账户的金钱丢失。相应地,如果扣除操作失败,添加转载 2012-06-14 16:51:09 · 1120 阅读 · 0 评论 -
第十章 实现可靠的会话
【前言】许多时候,创建WCF客户端应用程序和服务时,它们被部署在不同的计算机上,并通过网络通信。在网络中会遇到很多问题,如果不考虑安全问题,那么网络的主要问题是网络的不可靠性。有线网络和无线网络传输的信息都非常容易被拦截、干扰、甚至发生用户掉线的情况。很显然,这些都是不可接受的。如果WCF服务运行在PerSession服务实例模式下,那么客户端和WCF服务之间的会话将包含多条消息。转载 2012-06-14 16:52:12 · 2007 阅读 · 0 评论 -
第十一章 编写代码控制配置和通信(中)
摘要WCF服务的分发器可以在把消息传递至服务实例的方法之前或在接收到服务的响应消息之后,翻译并检查这些消息。如果你需要实现消息检查功能,那么你首先需要自定义检查消息的服务行为,然后通过硬编码将服务行为嵌入到代码中或扩展WCF服务行为并通过配置文件配置消息检查功能。检查消息WCF服务模型的一个有趣的特性是分发消息至服务的方法之前翻译消息,在离开服务方法后进入向客户端回传的传从转载 2012-06-14 16:59:34 · 606 阅读 · 0 评论 -
第六章 维护服务协定和数据协定
【摘要】在第一章WCF简介中,你已经了解SOA的基本原则--服务之间共享数据架构和协定,而并非类或者类型。当你定义服务时,你通过定义服务协定以指定操作。服务协定描述该服务的操作、操作所使用的参数类型及其操作返回值的类型。WCF服务对外公布服务协定的定义,服务开发人员使用这些定义去构建相应的客户端。开发人员可以通过Visual Sutdio自带的添加服务向导或者svcutil实用工具为根据服转载 2012-06-14 16:43:16 · 1136 阅读 · 0 评论 -
第五章 在因特网环境下保护WCF服务
【摘要】实现企业内部的WCF服务和客户端程序的安全需要相当的力气,但是WCF提供了绑定和行为来简化保护通信。使用.NET Framework4.0提供的认证和授权,可以确保服务和客户端消息传输的保密性,而且还确保只有经过授权的用户才能对服务提交请求。企业内部的网络环境由于内在的保密性,对比因特网其相对比较稳定;虽然也有黑客入侵,但这也只是偶尔的现象。只要系统管理员和网络管理员维护好企业转载 2012-06-14 16:45:52 · 1470 阅读 · 0 评论 -
第九章 事务支持(下)
【正文】设计支持事务的WCF服务本章前面小节的内容为你展示了在WCF服务中如何实现事务,但是在设计支持事务的WCF服务时,仍然有许多问题值得你关注。事务、会话和服务实例模式如果你在WCF服务中在一个或多个操作上设置OperationBehavior特性类的TransactionAutoComplete属性值为false,那么你必须设置服务实例模式为PerSessio转载 2012-06-14 16:51:40 · 1429 阅读 · 0 评论 -
第十一章 编写代码控制配置和通信 (上)
前言到目前为止,你已经很好地理解如何创建WCF客户端程序和服务,以及如何配置它们使两者之间可以相互通信。WCF一个非常引人注目的特点是可以通过配置文件配置服务和客户端。在配置文件的背后,WCF运行时使用配置信息创建发送和接收消息的架构,该架构使用配置文件中指定的协议,这些协议以某种方式编码并传送消息至服务操作对应的方法中。在实际工作中,你不可避免地会遇到通过代码来完成配置任务,这可能是由于转载 2012-06-14 16:58:00 · 1034 阅读 · 0 评论 -
第十一章 编写代码控制配置和通信(中)
摘要WCF服务的分发器可以在把消息传递至服务实例的方法之前或在接收到服务的响应消息之后,翻译并检查这些消息。如果你需要实现消息检查功能,那么你首先需要自定义检查消息的服务行为,然后通过硬编码将服务行为嵌入到代码中或扩展WCF服务行为并通过配置文件配置消息检查功能。检查消息WCF服务模型的一个有趣的特性是分发消息至服务的方法之前翻译消息,在离开服务方法后进入向客户端回传的传从转载 2012-06-14 16:59:18 · 964 阅读 · 0 评论 -
WCF开发之异常与错误处理
对于WCF中的异常与错误处理我们必须先了解一个概念SOAP Faults,它实际上就是在服务端和客户端之间来传递错误信息的一种载体。• 公共语言运行时(CLR)异常无法跨越服务边界– 未捕捉异常最多到达服务通道(service channel)– 在报告给客户端之前必须要进行序列化• 所有的异常都被序列化为SOAP faults– 基于标准的,可互操作的– 给予SOAP转载 2012-06-19 16:07:25 · 1313 阅读 · 0 评论