`

《WCF按部就班学习系列2_WCF服务契约概述》

阅读更多

本文的主要结构为:1)WCF服务契约的概述2)服务契约的分解与设计 3)实现代码分析及运行结果4)源码下载5)下一篇计划6)参考说明

(1)WCF服务契约的概述(What)

1.1契约:WCF的所有服务都会公开为契约(Contract)。契约与平台无关,是描述服务功能的标准方式。WCF定义了四种类型的契约:服务契约(Service Contract),数据契约(Data Contract),错误契约(Fault Contract),消息契约(Message Contract)。

1.2服务契约(Service Contract):服务契约描述了客户端能够执行的服务操作。

1.3ServiceContract特性可以将一个CLR接口映射为与技术无关的服务契约。ServiceContract特性公开了CLR接口(或者类)作为WCF契约。WCF契约与类型的访问限定无关,因为类型的访问限定属于CLR的概念。即使将ServiceContract特性应用在内部(Internal)接口上,该接口同样会公开为公有服务契约,以便于跨越服务边界实现服务的调用。如果接口没有标记ServiceContract特性,WCF客户端则无法访问它(即使接口是公有的)。这一特点遵循了面向服务的一个原则,即明确的服务边界。为满足这一原则,所有契约必须明确要求:只有接口(或者类)可以被标记为ServiceContract特性,从而被定义为WCF服务,其他类型都不允许。

1.4WCF只允许将OperationContract特性应用到方法上,而不允许应用到同样属于CLR概念的属性、索引器和事件上。WCF只能识别作为逻辑功能的操作(Operation)。通过应用OperationContract特性,可以将契约方法暴露为逻辑操作,使其成为服务契约的一部分。接口(或类)中的其他方法如果没有应用OperationContract特性,则与契约无关。这有利于确保明确的服务边界,为操作自身维护一个明确参与(Opt-In)的模型。此外,契约操作不能使用引用对象作为参数,只允许使用基本类型或数据契约。应用ServiceContract特性WCF允许将ServiceContract特性应用到接口或类上。当接口应用了Service-Contract特性后,需要定义类实现该接口。

1.5可以为契约定义命名空间。契约的命名空间具有与.NET编程相同的目的:确定契约的类型范围,以降低类型的冲突几率.可以使用ServiceContract类型的Namespace属性设置命名空间:

[ServiceContract(Namespace = "MyNamespace")]

interface IMyContract

{...}

若非特别指定,契约的默认命名空间为http://tempuri.org。对外服务的命名空间通常使用公司的URL;至于企业网(Intranet)内部服务的命名空间,则可以定义有意义的唯一名称,例如MyApplication。

1.6 在默认情况下,契约公开的名称就是接口名。但是也可以使用ServiceContract特性的Name属性为契约定义别名,从而在客户端的元数据(Metadata)中公开不同的名称:

[ServiceContract(Name = "IMyContract")]

interface IMyOtherContract

{...}

1.7相似的,操作公开的名称默认为方法名,但我们同样可以使用OperationContract特性的Name属性设置别名,从而公开不同的操作名:

[ServiceContract]

interface IMyContract

{

[OperationContract(Name = "SomeOperation")]

void MyMethod(string text);

}

(2)服务契约的分解与设计

2.1契约分解

一个服务契约是逻辑相关的操作的组合。所谓的“逻辑相关”通常指特定的领域逻辑。我们可以将服务契约想象成实体的不同表现。一旦识别(在需求分析之后)出实体支持的所有操作,就需要将它们分配给契约。这称为服务契约的分解。分解服务契约时,通常需要考虑可重用元素(Reusable Element)。在面向服务的应用程序中,一个可重用的基本单元就是服务契约.

2.2分解准则

显而易见,合理的契约分解可以实现深度特化、松散耦合、精细调整以及契约的重用。这些优势有助于改善整个系统。总的来说,契约分解的目的就是使契约包含的操作尽可能少。

设计面向服务的系统时,需要平衡两个影响系统的因素(参见图2-1 平衡服务的个数与规模)。一个是实现服务契约的代价,一个则是将服务契约合并或集成为一个高内聚应用程序的代价。

2.3总结

对于任何一个系统,实现契约所付出的代价,包括设计服务以及维护服务的代价,等于上述两个因素的总和(实现的代价与集成的代价)。图2-1的一个区域显示了最小代价与服务契约规模和数量之间的关系。一个设计良好的系统,服务的个数与规模应该恰如其分,遵循平衡的“中庸之道”,力求达到“增之一分则太多(大),减之一分则太少(小)”的标准。

(3)实现代码分析及运行结果

3.1为服务与客户端的操作指定别名。在服务端,要为重载的操作提供唯一的标识名.

3.2使客户端代码支持操作重载。方法是将导入的代理与契约的方法名修改为重载的名称,并确保代理类能够使用重载方法调用内部代理,在客户端使用导入契约的Name属性,指定别名并重载

方法,使它与导入的操作名保持一致,

(4)源码下载

http://download.csdn.net/source/2992039

(5)下一篇计划

下一篇主要介绍数据契约的相关知识。

(6)参考说明

1.《programming in WCF》

分享到:
评论

相关推荐

    《WCF按部就班学习系列7_WCF事务概述》

    让我们深入探讨一下“WCF按部就班学习系列7:WCF事务概述”中的核心知识点。 1. **WCF事务属性**:在WCF服务中,可以通过配置或编程方式启用事务。服务行为`ServiceBehavior`可以设置`TransactionEnabled`属性为`...

    《WCF按部就班学习系列8_WCF并发管理概述》

    **限流概述**是WCF并发管理中的另一个重要概念。限流是控制服务处理速率的一种机制,可以防止过多的并发请求导致系统资源耗尽。WCF通过设置服务的行为配置,可以限制并发请求数、最大接收消息数等,以达到服务级别的...

    《WCF按部就班学习系列3_WCF数据契约概述》

    学习这个系列,初学者可以理解WCF的基本架构,掌握如何定义和使用数据契约,创建服务契约,以及如何在不同的环境中(如IIS、自承载等)部署和运行WCF服务。同时,通过实际的代码示例,有助于深入理解和应用WCF技术。

    《WCF按部就班学习系列1_WCF基础知识概述》

    在“WCF按部就班学习系列1”中,我们将深入探讨WCF的基础知识,包括服务契约、宿主定义等关键概念。 **服务契约** 服务契约是WCF中的核心概念,它定义了服务提供的操作及其交互方式。服务契约通过接口(Interface...

    《WCF按部就班学习系列6_WCF错误概述》

    **Logbook服务概述** Logbook服务是一种常见的错误处理实践,它记录服务的运行状态,包括成功调用和失败调用。通过集成`IErrorHandler`,Logbook服务可以在出现异常时记录详细信息,以便于后续的排查和分析。 **...

    《WCF按部就班学习系列4_WCF实例管理概述》

    WCF实例管理的概述,WCF服务实例激活类型三种方式概述和单例服务的完整代码。

    《WCF按部就班学习系列5_WCF操作概述》

    **WCF(Windows Communication Foundation)**是微软推出的一种面向服务的通信框架,它提供了一种构建高度互操作的、安全的、可靠的服务的方法。在WCF中,**操作**是服务的基本工作单元,用户通过调用这些操作来与...

    WCF服务编程中文版_1

    当前pdf总共有7个部分: WCF服务编程中文版_1 WCF服务编程中文版_2 WCF服务编程中文版_3 WCF服务编程中文版_4 WCF服务编程中文版_5 WCF服务编程part1 WCF服务编程part2

    WCF服务编程中文版_3

    当前pdf总共有7个部分: WCF服务编程中文版_1 WCF服务编程中文版_2 WCF服务编程中文版_3 WCF服务编程中文版_4 WCF服务编程中文版_5 WCF服务编程part1 WCF服务编程part2

    WCF服务编程中文版_2

    当前pdf总共有7个部分: WCF服务编程中文版_1 WCF服务编程中文版_2 WCF服务编程中文版_3 WCF服务编程中文版_4 WCF服务编程中文版_5 WCF服务编程part1 WCF服务编程part2

    WCF服务编程中文版_5

    当前pdf总共有7个部分: WCF服务编程中文版_1 WCF服务编程中文版_2 WCF服务编程中文版_3 WCF服务编程中文版_4 WCF服务编程中文版_5 WCF服务编程part1 WCF服务编程part2

    WCF_idesign_1 WCF_idesign_1 WCF_idesign_1

    在设计WCF服务时,理解服务接口(Service Contract)、数据契约(Data Contract)、操作契约(Operation Contract)以及服务行为(Service Behavior)的概念至关重要。 【压缩包子文件的文件名称列表】中的唯一...

    wcf.rar_wcf_wcf C#

    标题中的“wcf.rar_wcf_wcf C#”暗示了这是一个关于Windows Communication Foundation(WCF)的项目,其中包含了C#语言的实现。WCF是微软.NET Framework的一部分,用于构建可互操作的分布式系统,允许服务提供者和...

    WCF_AsyncCall.rar_WCF_AsyncCall_wcf_wcf winform_并发_线程池

    C#WCF 服务并发管理,编程源代码,包括线程池的例子。

    WCF.rar_ChannelFactory_WCF DynamicProxy_WCF 动态_wcf 动态调用_动态WCF

    在WCF中,可以使用`Castle.DynamicProxy`库或者.NET Framework的`System.Reflection.Emit`命名空间来创建动态代理,从而在调用WCF服务时添加日志、事务控制等特性,而无需修改服务契约接口。 **WCF动态调用** 是指...

    WCF教程(Pro_WCF_Practical_Microsoft_SOA_Implementation-3297)

    本教程“Pro_WCF_Practical_Microsoft_SOA_Implementation-3297”专注于实践性学习,帮助开发者深入理解WCF的核心概念和技术,以及如何在实际项目中有效应用。通过一系列示例,你将学习到如何创建、配置和服务的调试...

    WCF.rar_wcf_whalewpf

    在“WCF.rar_wcf_whalewpf”压缩包中,包含的文件主要涉及WCF服务的创建、调用以及不同宿主方式的实现。** 1. **WCFClient**: 这个文件夹很可能包含了WCF服务的客户端应用程序,用于调用WCF服务。在WCF中,客户端...

    WCF大文件断点下载.rar_wcf_wcf文件上传_worthsdn_下载_远程下载

    在.NET平台上,Windows Communication Foundation(WCF)是一个强大的服务架构,用于构建分布式应用程序。本教程主要探讨了如何利用WCF实现大文件的断点下载功能,这是一个在远程文件传输中非常实用的技术。WCF文件...

Global site tag (gtag.js) - Google Analytics