随笔分类 -  WCF

Windows Communication Foundation
摘要:使用回调合约的原则是,提供一个服务,该服务采用单向操作(不返回任何信息)的方式通知客户端程序。本小节的例子基于之前描述过的更改产品价格场景。当客户端程序调用ProductsService服务的ChangePrice操作时,当数据库中产品的价格更新后,服务将回调客户端并通知客户端价格已经发生变化。 阅读全文
posted @ 2012-03-09 15:22 On the road.... 阅读(1522) 评论(6) 推荐(3) 编辑
摘要:到目前为止,本书中你看到的练习与例子都集中于C/S模型。在该模型中,一个服务器提供一个服务,该服务等待客户端主动发出的请求,接收到客户端的请求后,处理请求,然后选择性地向客户端程序发送响应。客户端程序是活动的参与者,提交请求并有效地决定了服务何时开始执行工作。然而这只是大多数的情况,WCF还支持其他的处理体系,比如点对点网络和客户端回调。使用客户端回调,服务可以调用客户端程序中的一个方法,实际上转换了C/S关系中的客户端和服务器,回调时原先的服务端和客户端将发生对调,服务端成为客户端,客户端成为服务端。 阅读全文
posted @ 2011-11-03 09:29 On the road.... 阅读(2019) 评论(7) 推荐(5) 编辑
摘要:本小节介绍了WCF数据服务,它是一个非常灵活的框架,使用该框架你可以直接基于ADO.NET Entity Framework实体模型构建REST Web服务。Visual Studio提供了生成客户端库的工具,客户端程序使用客户端库连接到服务,然后对数据进行查询和更新。客户端库隐藏了构建,发送和接受相应HTTP消息的细节,因此开发人员可以将精力集中在业务逻辑上。WCF数据服务是一个非常广泛的话题,本小节的内容也只是谈及了它的一些浅显知识。其他深入的内容:比如你可以定义业务操作,你可以对外公布未在实体模型中定义的数据;你可以访问微软的WCF数据服务页(http://msdn.microsoft.com/en-us/data/odata.aspx)获取更详细的内容。 阅读全文
posted @ 2011-11-01 11:57 On the road.... 阅读(2673) 评论(10) 推荐(6) 编辑
摘要:REST Web服务提供了查询数据的操作以响应HTTP GET请求。然而,HTTP协议还支持其他形式的请求,你可以利用这些消息类型提供可以修改REST Web服务中的数据的操作。最常见的情形是你使用HTTP POST请求创建新项目的操作,HTTP PUT请求更新现存数据的操作,使用HTTP DELETE请求定义删除项目的操作。请注意:POST请求是非对等的,而PUT请求与DELETE请求是对等的。这意味着PUT请求与DELETE请求可以多次重复地调用操作,这些操作都具有同样的效果。这个逻辑同样适用于DELETE请求;如果一个项目已经被删除,那么它还可以继续被删除。然而,使用POST请求重复地添加相同的信息可能会造成重复的数据。 阅读全文
posted @ 2011-10-26 13:17 On the road.... 阅读(2135) 评论(3) 推荐(3) 编辑
摘要:通常企业使用两种架构实现Web服务:基于SOAP的服务和基于REST模型的服务。这两个架构依赖HTTP协议和因特网实现的寻址体系,但采取不同的方式使用它们。到目前为止,本书所有的练习都集中在SOAP模型上,这种架构使得Web服务的设计者关注服务的业务过程,并把这些业务过程对外公开为服务的操作。相比之下,REST模型则关注企业对外公布的数据,并实现一个允许客户端程序使用自身的逻辑访问并操作这些数据的体系。REST模型变得越来越普遍,你可以使用WCF提供的特性、方法、和类型快捷地构建和访问REST Web服务。此外,实体框架为WCF提供了数据服务模板,你可以使用这些模板把来自实体框架模型的数据和实体作为REST资源对客户端程序公开。本小节介绍REST的基本概念,并创建和测试一个基本的REST服务。 阅读全文
posted @ 2011-10-25 17:27 On the road.... 阅读(2537) 评论(6) 推荐(3) 编辑
摘要:实现手动路由无疑是非常强大的技术,但是常见的场景下你所希望的仅仅是,基于请求的某些特性而不是编写一些动态的算法以实现路由消息。为了处理这样的场景,WCF提供了RoutingService类,该类位于System.ServiceModel.Route命名空间下。本小节不再使用负载均衡算法路由消息;而是利用RoutingService类实现基于消息头信息中包含的请求的类型路由消息到对应的服务实例。 阅读全文
posted @ 2011-10-22 15:37 On the road.... 阅读(1595) 评论(2) 推荐(2) 编辑
摘要:有时候需要从一个服务推送消息至另一个完全不同的服务以处理该消息。比如,当客户端程序发送请求至企业内部不同的WCF服务,但是所有这些请求实际上都首先通过前端的服务,该服务相当于WCF服务的防火墙。前端服务可以实现一个路由机制,通过检查消息的行为或地址以推送请求到真正的服务;该项技术就是基于地址的路由。前端服务还可以过滤消息,如果消息是非法请求那么阻塞该消息,消息过滤的效果取决于前端服务上所实施的智能检查的程度。另外一套类似的机制就是基于消息的内容路由消息;这项技术就是基于内容的路由。前端服务还可以提供其他特性,比如负载均衡。客户端的请求达到单个前端服务,前端服务使用负载均衡算法分发请求到真正运行WCF服务的服务器。 阅读全文
posted @ 2011-10-09 18:01 On the road.... 阅读(1836) 评论(2) 推荐(3) 编辑
摘要:使用服务声明可以减少由Probe消息和ProbeMatch消息带来的网络流量,但是如果服务启动时客户端程序没有运行那么会发生什么?答案是客户端将失去通知消息因此不能发现服务,因为客户端不能连接到服务。解决方法是使用一个发现消息和声明的结合体;创建一个中间服务,该服务使用一个已知的地址侦听来自服务的声明消息并缓存这些声明消息。在客户端程序中,发送Probe消息至中间服务。中间服务可以接受这些Probe请求,在缓存中查找服务的地址,如果匹配,想客户端返回一条ProbeResponse消息,该消息包含匹配服务的详细信息。由于中间服务在一个固定的、已知的地址上,客户端不需要向网络广播大量的Probe消息;相反,它们直接向中间服务发送单播Probe消息。在本小节,我们将学习如何创建这样一个中间服务,并测试其工作过程。 阅读全文
posted @ 2011-09-15 16:40 On the road.... 阅读(1503) 评论(1) 推荐(3) 编辑
摘要:如果客户端程序向WCF服务发送一条请求消息,那么客户端通过端点发送该请求。如果你回想一下,端点由三部分组成:地址,绑定和合约。地址指明消息发送的目的地;绑定指明传输、格式、以及于与服务进行通讯所使用的协议;合约决定客户端可以发现的消息以及客户端期望的响应消息。多个服务可以实现同一个服务合约,或一个服务也有可能更改地址。如果客户端将服务特定的地址硬编码在客户端的配置文件中,那么如果服务发生变动、或者临时不可访问、或者服务由于太忙而不能处理请求,那么客户端将不再能继续与该服务通讯。WCF提供了检测服务和路由消息来解决上述问题。在本章的第一部分,你将看到如何在一个通过Ad Hoc模式和服务声明方式在WCF解决方案中实现检测服务。 阅读全文
posted @ 2011-08-30 23:48 On the road.... 阅读(2202) 评论(6) 推荐(2) 编辑
摘要:在传输数据时,使用合适的编码机制对提高性能亦有显著的影响。你已经了解到,WCF支持使用文本和二进制对消息进行编码。两者相比较,二进制经常更具有影响力并且占用较少的网络流量,但是二进制编码格式是与平台相关的,因此运行在非Windows平台上的服务和客户端程序不能轻易地使用它。此外,WCF还支持消息传输优化机制(MTOM),该机制为传输大块的二进制数据提供了一个标准的,互操作的,并且有效的格式。如果你知道服务传输数据的大小,那么此时启用MTOM是非常有用的;然而有些服务发送未知大小的数据块,这种场景下最好启用流模式传输数据,WCF同样支持从服务输出流。在本小节中,你将学习到如何使用MTOM编码数据以减少大二进制数据对象的系统开销,以及何如启用流模式以最大化地利用网络带宽。 阅读全文
posted @ 2011-08-25 17:11 On the road.... 阅读(2507) 评论(0) 推荐(3) 编辑
摘要:良好的性能是大多数应用程序和服务的关键因素,你可以通过周密地设计,以及选择合适的特性以确保WCF服务维持其吞吐量,保持响应并具有可扩展性。到目前为止,这些技术包括事务,session状态,可靠地消息传递,以及异步操作。还有其他一些影响性能的方面,比如安全。维持性能的一个重要的方面是需要确保服务不会耗尽宿主计算机上可用的资源,进而导致计系统变慢,甚至停止响应。WCF提供服务阀值以帮助控制资源的利用。使用该特性可以最大程度的维持服务的最大扩展性。负载均衡是另外一个技术你可以用来分发请求至多个服务器并保持相同的输出。你还可以基于Windows网络负载均衡和WindowsServer AppFabric(Windows云平台中间件)创建一个负载均衡的架构,尽管该技术的详细信息超出本书的讨论范围。 阅读全文
posted @ 2011-08-24 09:57 On the road.... 阅读(3062) 评论(10) 推荐(2) 编辑
摘要:WCF 4.0 进阶系列 -- 随笔汇总 阅读全文
posted @ 2011-08-22 22:42 On the road.... 阅读(2181) 评论(6) 推荐(4) 编辑
摘要:消息队列是本书WCF异步技术中的最后一个出场的。消息队列可以为消息传输提供持久性、可靠性和事务性。甚至,发送消息的客户端程序与接受消息的服务可以不必同时运行。但使用该灵活性需要付出一定的代价,那就是消息队列只能支持单向传输。因此如果使用该技术实现客户端程序和服务并且服务需要向客户端发送响应消息时,需要仔细的设计。另外,消息队列比其他传输协议更慢,这是因为它所支持的可靠性和可持续性;Windows操作系统需要把消息存储到磁盘。这意味着消息队列中的消息可以不受关机或者电源失败的影响;但这种稳健性在创建和传输消息时需要付出额外的I/O代价。 阅读全文
posted @ 2011-08-22 16:42 On the road.... 阅读(1814) 评论(11) 推荐(3) 编辑
摘要:如果客户端不仅要求服务回传相应,并且能够在等待响应的时候(线程安全地)执行其他任务,那么你需要实现异步方法调用。使用该技术,客户端程序可以发送一个请求然后后继续执行其他任务。当服务的响应消息到达,客户端程序的一个单独线程将处理该响应。为了处理这些情况,WCF支持异步操作和IAsyncResult设计模式。在WCF中你可以使用两种方式实现IAsyncResult设计模式:在客户端程序中异步调用操作;或在WCF服务中实现异步操作。 阅读全文
posted @ 2011-08-10 09:43 On the road.... 阅读(2309) 评论(3) 推荐(6) 编辑
摘要:WCF客户端通过代理对象可连接至服务。如果服务管理员禁用了服务元数据公布或者出于性能原因,那么在客户端可以通过代码创建ChannelFactory对象连接至服务并与服务通讯;甚至还可以通过扩展ClientBase抽样类与服务交互。使用上述两种方式时有一个前提那就是服务开发人员可以提供包含服务合约的组件。如果该前提也不存在,只要你拥有描述服务接受的SOAP消息和服务发送的响应消息的文档时,那么你也可以使用WCF客户端访问该服务;你可以直接通过通道向服务发送消息。 阅读全文
posted @ 2011-08-01 12:33 On the road.... 阅读(1920) 评论(1) 推荐(2) 编辑
摘要:到目前为止,你已经很好地理解如何创建WCF客户端程序和服务,以及如何配置它们使两者之间可以相互通信。WCF一个非常引人注目的特点是可以通过配置文件配置服务和客户端。在配置文件的背后,WCF运行时使用配置信息创建发送和接收消息的架构,该架构使用配置文件中指定的协议,这些协议以某种方式编码并传送消息至服务操作对应的方法中。在实际工作中,你不可避免地会遇到通过代码来完成配置任务,这可能是由于程序或者服务需要自适应其运行的环境并且不需要管理员的介入。或者,由于安全原因,你可能不希望任何人修改程序的配置文件。比如,你可能不希望管理员激活或者关闭服务对外公布的元数据。此外,观察到WCF运行时运行客户端或服务时所执行的各种任务也是非常有好处的。在本小节中,你会进一步了解到WCF服务模型的工作流程,绑定与通道的相关知识,最后在ShoppingCartService服务中使用代码创建和使用自定义绑定。 阅读全文
posted @ 2011-07-21 12:08 On the road.... 阅读(1834) 评论(2) 推荐(3) 编辑
摘要:通过公开网络传输的消息非常容易受到攻击。它们可能面临拦截、中断、改变等一系列令人讨厌的攻击。一些Web服务规范(WS-*)用于保护消息,并且在前面的章节中你也已经了解到WCF如何实现其中的一些规范。另外一个常见的安全问题是"重放攻击":第三方拦截消息并不停地推送这些消息至接收方。用于可靠地发送消息并消除重放攻击的相关规范是WS-ReliableMessaging规范。 严格地讲,可靠的消息传递和可靠的会话是两个不同但相关的概念。可靠的消息传送关注点在于确保消息仅仅传送一次,而可靠的会话提供发送和接收一系列可靠消息的环境。在WCF中,可靠的会话独立于可靠的消息传送;使用可靠的消息传送,你可以在客户端和服务之间提供点到点的可靠会话。本章将同事调查这两个方面;你将学习如何使用WCF提供可靠的会话和可靠的消息传送,以及学习如何配置重放识别。 阅读全文
posted @ 2011-07-09 12:27 On the road.... 阅读(2250) 评论(0) 推荐(3) 编辑
摘要:在事务支持的下篇中,介绍了三点的内容。首先介绍如何设计支持事务的WCF服务。在设计时我们需要考虑事务、会话和服务实例模式;事务与消息传递;以及事务与多线程方面的问题。然后介绍了如何实现支持事务的工作流服务,并比较了事务性工作流服务和事务性非工作流服务。最后介绍了在实践中,如何处理长时间运行的工作流服务... 阅读全文
posted @ 2011-07-01 17:53 On the road.... 阅读(1761) 评论(0) 推荐(1) 编辑
摘要:企业使用WCF服务的一个主要原因是通过包装现有的组件和程序构建面向服务的应用,这些应用通过不仅简单而且适应力很强地方式重用。这种策略为企业带来了非常大的灵活性,因为它可以简单地响应快速变化的业务需求、并迅速地创建或更改系统以适应这些需求。 许多企业采用的业务过程都由一系列明确的、并按照特定顺序执行的步骤组成。其中一些步骤可能涉及调用服务的操作,这需要确保WCF服务的操作顺序应当与基本业务过程相匹配。你已了解到在服务的方法上通过操作行为特性,可以指定某个操作发起或终止一个会话;除此之外,服务几乎再不能控制客户端调用服务操作的顺序。这增加了强制客户端程序按照顺序调用服务操作的困难,此外这种方式还可能导致难以发现(并纠正)的错误。使用工作流来定义服务可以帮助解决这个问题,并且强制客户端按照一定的顺序调用服务的操作。 另外一个潜在的问题是谁负责真正地定义和实现业务过程的逻辑。 没有谁比业务分析师能更好地掌握企业所采用业务过程。你不应该期望一个业务分析师同时还精通WCF、或者掌握如何实现WCF服务的操作;很明显这些任务应当是开发人员负责的。另外一个方面,开发人员可能非常擅长构建重 阅读全文
posted @ 2011-06-27 10:19 On the road.... 阅读(2810) 评论(14) 推荐(6) 编辑
摘要:在之前章节所完成的练习中,客户端调用WCF服务的一系列操作,但是这些操作的顺序并不重要;因此先调用一个操作然后再调用另外一个操作,均不会对彼此产生影响,因为这些操作是相互独立地。但在实际应用中,服务的操作可能需按照一定的顺序调用。比如,如果你在服务中实现了购物车功能,那么在没有将任何商品放进购物车之前,就执行结算和支付操作显然是没有意义的。按照一定的顺序调用操作会使你考虑在如何两次操作之间维持会话状态信息,那么该如何将这些会话的状态信息存储到持久化设备上。这些就是本章将介绍的内容。 阅读全文
posted @ 2011-06-15 10:43 On the road.... 阅读(2564) 评论(2) 推荐(1) 编辑