WCF学习(五):数据契约之已知类型(20190215103340)
跟我一起从零开始学WCF系列课程
跟我⼀起从零开始学WCF系列课程系列课程 >跟我⼀起从零开始学WCF系列课程跟我⼀起从零开始学WCF系列课程(1):WCF 讲 师:徐长龙课程简介:课程简介:从本堂课开始我们将开启⼀个新的系列-概述 (Level 200)讲 师:Windows Communication Foundation(WCF)。
本系列课程将听众假定为对WCF没有任何了解,从零开始⼀步⼀步带领⼤家进⼊到WCF领域。
WCF是使⽤托管代码建⽴和运⾏⾯向服务(Service Oriented)应⽤程序的统⼀框架。
它使得开发者能够建⽴⼀个跨平台的安全、可信赖、事务性的解决⽅案,且能与已有系统兼容协作。
WCF是微软分布式应⽤程序开发的集⼤成者,它整合了.Net平台下所有的和分布式系统有关的技术,例如.Net Remoting、ASMX、WSE 和MSMQ。
以通信(Communiation)范围⽽论,它可以跨进程、跨机器、跨⼦⽹、企业⽹乃⾄于Internet;以宿主程序⽽论,可以以,EXE,WPF,Windows Forms,NT Service,COM+作为宿主(Host)。
Demo下载:⽆相关下载讲 师:徐长跟我⼀起从零开始学WCF系列课程(2):设计和实现服务协定 (Level 200)讲 师:龙课程简介:课程简介:在了解了WCF的概念后,本堂课我们将开始学习如何定义和实现WCF服务协定。
包括单向和双⼯WCF服务协定,参数和返回值的定义,数据协定,Out和Ref参数等。
讲 师:徐长龙课程简跟我⼀起从零开始学WCF系列课程(3):配置服务 (Level 200)讲 师:介:介:在设计和实现服务协定后,即可配置服务。
在其中可以定义和⾃定义如何向客户端公开服务,包括指定可以找到服务的地址、服务⽤于发送和接收消息的传输和消息编码,以及服务需要的安全类型。
Demo下载:⽆相关下载跟我⼀起从零开始学WCF系列课程(4): 承载服务 (Level 200)讲 师:讲 师:徐长龙课程简介:服务若要成为活动的,必须承载于适当的运⾏环境中。
WCF 基础培训讲义
Messaging(消息传递) WS Security Channel HTTP Channel WS Reliable Messaging Channel TCP Channel Transactional Flow Channel Encoders Binary/Text/MTOM/XML MSMQ Channel
25
WCF体系结构
Application(应用程序) Contracts(合约) Data Contracts Message Contracts Service Contracts Policy and Bindings
Service Runtime(服务运行时) Throttling Behavior Metadata Support Error Behavior Instance Support Transactional Behavior Message Inspection Concurrency Behavior Message Dispatching
11
WCF 与 Web Service 的区别
Web Service 就是 Web Service WCF比Web Service性能好 WCF比 Web Service快 SOA 体系架构 WCF比Web Service速度快 WCF比Web Service强大 WCF比Web Service安全 Web Service Web Service必将被WCF取代 行业标准 WCF其实就是Web Service
/ 支持 /
/ / 支持
支持 支持 支持
21
WCF特性
统一性
WCF整合了ASMX、.Net Remoting、Enterprise Service、WSE和MSMQ等技术,使它们统一到一 起。 开发WCF的应用程序与开发其它类型的.NET应用 程序几乎没有区别。可以像创建对象导向的应用程 序那样,利用WCF来创建面向服务的应用程序。 WCF可以以IIS作为宿主(Host),也可以以 Windows Service,Windows Forms,WPF等作为宿 主。 WCF既可以支持HTTP协议,也可以支持TCP协议。
WCF_基本知识点整理
3 第一个WCF程序
在了解了WCF的基本概念以后,本节将按照程序员学习新技术的习 惯,给出一个简单的服务契约的HelloWord实例跟一个数据契约的实 例。
3.1 HelloWord服务契约的定义
using System.ServiceModel ;
[ServiceContract] public interface IService1 { [OperationContract] string HelloWord(string name); } public class Service1 : IService1 { public string HelloWord(string name) { return name + "说:HelloWord"; } } Demo1,但总结来说,一个合格的SOA系统 需要至少拥有下列4个特性。
1. 每个服务具有明确的服务边界。
所谓服务边界,是指服务的公共接口与其内部专用实现之间的界限。明 确的服务边界使得服务与位置和技术无关。换句话说,客户端无法知道 服务实现的技术、地理位置和运行平台。
{ [OperationContract] string GetInfomation(People people); } Demo2数据契约 知识点:通过自寄宿在服务器端模拟客户端
4 WCF消息交换模式
WCF客户端与服务器之间是通过消息进行通讯,了解WCF的消息交换 模式有助于大家对消息的发送和接受由更直观的理解。在WCF中,有 三种消息交换模式:数据报模式、请求-响应模式、双工模式。
3. 契约(Contract)
在2.3节中,笔者已经介绍了契约的基本概念。在WCF中一共包含了4 种契约,分别是服务契约、数据契约、错误契约和消息契约。 1. 服务契约[ServiceContract] 服务契约将多个相关的操作联系在一起,组成单个功能单元。 2. 数据契约[DataContract] 数据类型的说明称为数据契约。服务使用的数据类型必须在元数据中进 行描述,以使其它各方面可以与该服务进行交互操作。 3. 错误契约[FaultContract] 错误类型的说明称为错误契约。 4. 消息契约[MessageContract] 消息契约描述消息的格式。 5. 终节点(EndPoint) 终结点是用来发送或接收消息(或同时执行这两种操作)的构造。一个 终节点由三个要素组成,分别是笔者已经介绍了的:地址、绑定和契 约。以SOA的思想来看,一个终节点就相当于服务的公共接口。 6. 元数据 服务的元数据描述服务的特征,外部实体需要了解这些特征以便与该服 务进行通信。服务所公开的元数据包括XML架构文档(用于定义服务的 数据协定)和WSDL文档(用于描述服务的方法)。启用元数据后, WCF通过检查服务及其终节点自动生成服务的元数据。 在WCF的行为章节中,笔者将介绍两种WCF的元数据发布方式。 7. 宿主 服务必须承载于某个进程中。宿主是控制服务的生存期的应用程序。
wcf服务编程 ch5_数据协定和消息协定
数据协定:等效性
以下是等效的
[DataMember] public int Y; [DataMember] public int X;
[DataMember] public int X; [DataMember] public int Y;
[DataMember(Order = 2)] public int Y; [DataMember(Order = 1)] public int X;
数据协定
仅当用于未标记的类型时,才接受 IgnoreDataMemberAttribute 属性。 没有使用 DataMemberAttribute 的属性将不会被序列化。 可以将 DataMemberAttribute 属性 (Attribute) 应用于字段和属性 (Property)。 成员可访问性级别(internal、private、protected 或 public)对数据协定无任何影响。 如果将 DataMemberAttribute 属性应用于静态成员,则将忽略该属性。 在序列化期间,为属性数据成员调用 property-get 代码来获取要序列化的属性的值。 在反序列化期间,首先创建一个未初始化的对象,而不在该类型上调用任何构造函数 。 然后反序列化所有数据成员。 在反序列化期间,为属性数据成员调用 property-set 代码,将属性设置为要反序列化的 值。 对于将要生效的数据协定,它必须能序列化其所有数据成员。 有关可序列化类型的完 整列表,请参见数据协定序列化程序支持的类型。 泛型类型的处理方式与非泛型类型完全相同。 泛型参数无特殊要求。
数据协定:等效性
以下是等效的
[DataContract(Name = "Customer")] public class Person { [DataMember(Name = "fullName")] private string nameOfPerson; private string address;
wcf 面试题
wcf 面试题WCF(Windows Communication Foundation)是一个用于构建分布式应用程序的框架,它提供了一种统一的编程模型,用于在应用程序之间进行通信。
WCF 面试题旨在评估面试者对 WCF 框架的理解程度和其在实际应用中的应用能力。
在接下来的文章中,将回答一些常见的 WCF 面试题,并提供详细的解释和示例。
一、什么是 WCF?WCF 是一种用于构建分布式系统的微软技术,它提供了一种可靠、安全和可扩展的方式,用于在应用程序之间进行通信。
WCF 使用SOAP(简单对象访问协议)作为其主要通信协议,并支持其它协议如HTTP、TCP 等。
它提供了对于消息传输、编码、安全性等方面的灵活配置。
二、WCF 的主要组件有哪些?WCF 的主要组件包括:1. 服务契约(Service Contract):定义了服务的操作和消息交换模式。
2. 数据契约(Data Contract):用于在服务和客户端之间传输数据的约定。
3. 消息(Message):在 WCF 中,所有的通信都是通过消息进行的。
消息可以包含头部、正文和尾部信息。
4. 服务端点(Service Endpoint):定义了服务的地址、协议和绑定信息。
5. 绑定(Binding):指定了服务和客户端之间的通信规范。
6. 行为(Behavior):用于配置和扩展服务的运行时行为。
三、WCF 支持哪些传输协议?WCF 支持多种传输协议,包括但不限于:1. HTTP:最常用和通用的传输协议,在互联网环境中广泛使用。
2. TCP:提供了高性能和可靠性的传输协议,适用于局域网或内部网络。
3. MSMQ:使用消息队列来进行异步的、可靠的消息传输。
4. Named Pipes:适用于在同一台机器上的进程间通信。
5. Peer-to-Peer:支持对等网络的传输协议,用于构建分布式系统。
四、如何创建和部署一个 WCF 服务?创建和部署一个 WCF 服务需要以下步骤:1. 定义服务契约和数据契约。
WCF知识点详解
DataMemberAttribute特性只能应用类成员,只有应用了DataMemberAttribute特性的 字段或者属性成员才能成为数据契约的数据成员。
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, Inherited = false, AllowMultiple = false)] public sealed class DataMemberAttribute : Attribute { public DataMemberAttribute(); public bool EmitDefaultValue { get; set; } public bool IsRequired { get; set; } public string Name { get; set; } public int Order { get; set; } }
ProtectionLevel属性 ProtectionLevel属性表示当使用一个服务契约时,绑定必须达到的消息安全级别 。该属性的类型为.Security.ProtectionLevel,它的三个枚举值是: None,Sign和EncryptAndSign。当.Security.ProtectionLevel属性的值为Sign 时,服务发送和接受的所有消息必须经过签名。当属性设置为None时,表示服务发送 和接受的消息无须启用消息安全。ProtectionLevel属性影响的是是消息体中数据,不会 影响消息头的结构。 SessionMode属性 SessionMode属性表示程序里使用的通道必须、允许或者不允许使用会话通道。 SessionMode属性是System.ServiceModel.SessionMode类型,它的枚举值是Allowed-允 许会话、NotAllowed-不允许会话、Required-要求会话(需要有支持会话的Binding支持 ,WsHttpBinding、NetTcpBinding等)。若要设计一个会话契约,我们建议使用 Required 方式,而不是默认值Allowed。SessionMode.Required值要求必须使用传输层 会话,但应用层会话却不是必要的,如果服务终结点的绑定没有维持一个传输层会话 ,就不能为这样的服务契约配置SessionMode.Required。这一约束条件会在装载服务 时进行验证。但是,我们仍然可以将服务配置为单调服务,服务实例会在每次客户端 调用期间创建与销毁实例。只有当服务被配置为会话服务时,服务实例才会存活于整 个客户端会话中。
WCF契约
WCF契约定义及主要用途WCF契约总共可以分为四种,分别为:用于定义服务操作的服务契约;用于自定义数据结构的数据契约;用于控制消息格式的消息契约等。
我们在使用WCF时,对其制定各种各样的规则,就叫做WCF契约。
任何一个分布式的应用程序在传递消息的时候都需要实现制定一个规则。
任何一个分布式应用程序,它之所以能够互相传递消息,都是事先制定好数据交换规则的,这个规则正是交换数据的双方(比如服务器端和客户端)能彼此理解对方的依据,WCF作为分布式开发技术的一种,同样具有这样一种特性。
而在WCF中制定的的规则就被称之为契约(Contract),它是WCF的消息标准,是任何一个wcf程序不可或缺的一部分。
契约有几种?,他们都有什么用途在WCF中,契约分为四种,它们分别为:1、用于定义服务操作的服务WCF契约:Service Contract这种级别的契约又包括两种:ServiceContract和OperationContractServiceContract用于类或者结构上,用于指示WCF此类或者结构能够被远程调用,而OperationContract用于类中的方法(Method)上,用于指示WCF该方法可被远程调用。
2、用于自定义数据结构的数据WCF契约:Data Contract数据契约也分为两种:DataContract和DataMember.DataContract用于类或者结构上,指示 WCF此类或者结构能够被序列化并传输,而DataMember只能用在类或者结构的属性(Property)或者字段(Field)上,指示WCF该属性或者字段能够被序列化传输。
3、用于自定错误异常的异常WCF契约:Fault ContractFaultContract用于自定义错误异常的处理方式,默认情况下,当服务端抛出异常的时候,客户端能接收到异常信息的描述,但这些描述往往格式统一,有时比较难以从中获取有用的信息,此时,我们可以自定义异常消息的格式,将我们关心的消息放到错误消息中传递给客户端,此时需要在方法上添加自定义一个错误消息的类,然后在要处理异常的函数上加上FaultContract,并将异常信息指示返回为自定义格式。
网上的WCF教程
无废话WCF入门教程之一什么是WCF一、概述Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分。
由 .NET Framework 3.0 开始引入。
WCF的最终目标是通过进程或不同的系统、通过本地网络或是通过Internet 收发客户和服务之间的消息。
WCF合并了Web服务、.net Remoting、消息队列和Enterprise Services的功能并集成在Visual Studio中。
WCF专门用于面向服务开发。
二、基于 的应用程序开发与面向服务开发在基于 的应用程序开发中,我们由客户机的浏览器访问应用程序服务器,然后通过应用程序服务器中的数据库连接去连接数据库服务器,读取或是操作数据,有时候可能会多一个文件服务器。
大家可以观察到,基本上所有的应用都放在了一台服务器上,但对于一个,由于业务上的需要(如:与外部系统交互),一台服务器很难支持所有的应用。
我们再看下面的图:客户机使用浏览器访问服务器A,服务器A为了业务需要与其他各种应用部署在服务器B、C、D....再通过WCF技术互相通信,相互访问...然而面向服务的好处不仅仅在此,他还提供了不同语言不同操作系统的可交互性..由于本文不是介绍SOA的文章,感兴趣的同学可以参见:SOA三、第一个WCF程序1. 新建立空白解决方案,并在解决方案中新建项目,项目类型为:WCF服务应用程序。
建立完成后如下图所示:2.删除系统生成的两个文件IService1.cs与Service1.svc。
3.添加自定义的WCF【服务文件】User.svc,此时vs2010会自动生成WCF 接口文件IUser.cs,我们在IUser中定义WCF方法ShowName,在User.svc.cs 对该接口的方法进行实现。
代码如下:1using System.ServiceModel;23namespace WCFService4 {5[ServiceContract]6public interface IUser7{8[OperationContract]9string ShowName(string name);10}11 }121314namespace WCFService15 {16public class User : IUser17{18public string ShowName(string name)19{20string wcfName = string.Format("WCF服务,显示姓名:{0}", name); 21return wcfName;22}23}24 }大家可以看到,在WCF中的接口与普通接口的区别只在于两个上下文,其他的和我们正常学习的接口一样。
WCF基本知识点整理
WCF基本知识点整理1. 服务契约(Service Contract):WCF中的服务以服务契约的形式定义。
服务契约是一个接口,定义了服务所提供的操作。
每个操作都有一个输入和一个输出参数。
开发人员可以通过定义自己的服务契约来实现自定义的服务。
2. 数据契约(Data Contract):WCF中的数据传输使用数据契约来定义。
数据契约是一个类或结构体,定义了要在服务和客户端之间传输的数据类型。
数据契约可以通过定义属性来描述数据的结构和属性。
3. 绑定(Binding):WCF中的绑定定义了服务与客户端之间的通信方式。
绑定可以指定传输协议、数据编码方式、安全性等。
WCF提供了多种默认的绑定,开发人员也可以自定义绑定来满足自己的需求。
4. 传输(Transport):WCF支持多种传输协议,如HTTP、TCP、MSMQ等。
开发人员可以根据需求选择适合的传输协议。
5. 消息(Message):WCF中的通信是通过消息来进行的。
消息是服务和客户端之间传输的基本单位,可以包含头部和正文。
开发人员可以通过定义自己的消息来实现自定义的通信协议。
6. 终结点(Endpoint):WCF中的终结点定义了服务的地址、绑定和契约。
终结点由地址和契约唯一确定。
客户端通过终结点与服务进行通信。
7. 客户端代理(Client Proxy):客户端通过代理类与服务进行通信。
客户端代理是通过WCF工具自动生成的,它封装了与服务之间的通信细节,开发人员可以通过客户端代理来调用服务的操作。
8. 服务宿主(Service Host):服务宿主是承载WCF服务的应用程序。
服务宿主负责启动服务、接受客户端请求,并将请求路由到相应的服务端点。
9. 错误处理(Error Handling):WCF提供了丰富的错误处理机制,开发人员可以通过异常处理来处理服务中的错误。
WCF还可以通过配置来定义错误处理策略,如故障转移、重试等。
10. 安全性(Security):WCF提供了多种安全性机制,如消息加密、身份验证、权限控制等。
WCF详解文档最新
一、分布式分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。
分布式网络存储技术是将数据分散的存储于多台独立的机器设备上。
分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,不但解决了传统集中式存储系统中单存储服务器的瓶颈问题,还提高了系统的可靠性、可用性和扩展性。
二、面向服务的体系结构(Service-Oriented Architecture,SOA)SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。
接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。
这使得构建在各种这样的系统中的服务可以一种统一和通用的方式进行交互。
面向服务的体系结构传统的面向对象的模型的替代模型,面向对象的模型是紧耦合的,现在的SOA 已经有所不同了,因为它依赖于一些更新的进展,这些进展是以可扩展标记语言(Extensible Markup Language,XML)为基础的。
通过使用基于XML 的语言(Web 服务描述语言[Web Services Definition Language,WSDL])来描述接口,服务已经转到更动态且更灵活的接口系统中。
面向服务的体系结构作用:对SOA 的需要来源于需要使业务IT 系统变得更加灵活,以适应业务中的改变。
通过允许强定义的关系和依然灵活的特定实现,IT 系统既可以利用现有系统的功能,又可以准备在以后做一些改变来满足它们之间交互的需要。
对于面向同步和异步应用的,基于请求/响应模式的分布式计算来说,SOA是一场革命。
一个应用程序的业务逻辑(business logic)或某些单独的功能被模块化并作为服务呈现客户端。
例如,服务的接口和实现相独立。
WCF入门教程
我们通过实现一个简单的示例来对WCF有个直观而浅显的认识,希望对初次涉及WCF的朋友有所帮助。
可以简单地认为WCF程序分为4部分:契约、服务、宿主、客户端。
我们通过一个例子来逐步完成各部分,示例程序中,客户端可以获取一个信息列表,列表中每一项包括ID、值、读值时刻、状态、状态变动时刻。
这里我用的是VS2010。
首先,创建一个空白解决方案WCFDemo。
我们将在其中添加n个项目,分别实现契约、服务、宿主、客户端。
如果用VS2010新建“WCF服务库”或者“WCF服务应用程序”,它会默认把契约和服务放在一个项目中,我们这个示例把契约和服务分别放在2个类库项目中。
第一步:契约1、添加一个类库WCFDemo.Contracts。
2、在类库中添加2个文件DataContracts.cs和ServiceContracts.cs,分别放置数据契约和服务契约。
3、添加引用System.Runtime.Serialization和System.ServiceModel。
4、编写代码如下:DataContracts.csusing System;using System.Runtime.Serialization; namespace WCFDemo.Contracts{[DataContract]public class DemoData{[DataMember]public int ID{get;set;}[DataMember]public double Value{get;set;}[DataMember]public DateTime ValueTime{get;set;}[DataMember]public DeviceState State{get;set;}[DataMember]public DateTime StateTime{get;set;} }public enum DeviceState{Unknown,Working,Broken}}(题外话:DemoData类中各个属性的写法有些偷懒,其实个人不建议这样。
WCF复习题
WCF复习题一、填空题(基础知识)1、WCF是一个完全基于SOA的通信框架的Windows平台下各种分布式技术的统一平台.2(1)、WCF是基于Windows平台下开发和部署服务的SDK。
3、WCF的绝大部分功能都包含在一个程序集System.ServiceModel.dll 中,命名空间是System.ServiceModel4、面向服务的应用程序将众多服务聚集到一个单一逻辑的应用程序中,这就类似于面向对象的应用程序聚合对象。
5、WCF中的消息通是SOAP消息,与服务不同的是,这些消息与传输协议无关。
6、WCF的服务不能孤立地存在,需要寄宿于一个运行着的进程中,承载WCF服务的进程称为宿主,为服务指定宿主的过程称为服务寄宿(Service Hosting)。
7、WCF采用基于契约的交互方式实现了服务的自治,以及客户端和服务端之间的松耦合。
8、WCF包含四种类型的契约:服务契约、数据契约、消息契约和错误契约。
9(6)、WCF服务需要依存一个运行着的进程(宿主),服务寄宿就是为服务指定一个宿主的过程。
10、WCF是一个基于消息的通信框架,采用基于终结点(Endpoint)的通信手段。
11、终结点由地址(Address)、绑定(Binding)和契约(Contract)三要素组成。
12(11)、一个终结包含了实现通信所必需的所有信息,终结点的ABC 是指地址(Address)、绑定(Binding)和契约(Contract)。
13、终结点的地址(Address):地址决定了服务的位置,解决了服务寻址的问题。
14、终结点的绑定(Binding):绑定实现了通信的所有细节,包括网络传输、消息编码,以及其他为实现某种功能对消息进行的相应处理。
15、终结点的契约(Contract):契约是对服务操作的抽象,也是对消息交换模式以及消息结构的定义。
16、Endpoint包含的4个对象分别是:Address:、Binding、Contract 即Behavior。
WCF面向服务应用程序系列之五:契约版本管理—版本相容性
WCF面向效劳应用程序系列之五:契约版本管理—版本相容性WCF版本相容性:指WCF的效劳端在更新为新版本的情况下,客户端对效劳端的引用不进行更新到最新的效劳端,而继续引用旧的效劳端但不发性异常。
WCF契约缺省是提供版本相容性支持的,所有的效劳契约,数据契约与消息契约,都允许缺失、非必需(non-required)的数据存在;且可以忽略多余的数据;DataContractSerializer提供相容性支持;适当的变化并不会对现存的客户端或者效劳端产生影响。
开发环境:Visual Studio 2021 + Net Framework 4.0 。
效劳契约的变化对客户端产生的影响如下:数据契约为变化对客户端产生的影响如下:下面通过DEMO来演示效劳端数据契约的变化对现存客户端的影响:1、新增一个WCF Service Library程序,修改解决方案名称为ContractVersion,修改工程名称为ExplicitContract,删除自动添加的文件。
2、新建Item.cs类,代码如下:[DataContract(Name = "ItemContract", Namespace = " ://schemas.xi nhaijulan /demos/ExplicitContract")]public class Item{[DataMember(Name = "IdContract", IsRequired = true, Order = 0)] public int Id { get; set; }[DataMember(Name = "NameContract", IsRequired = true, Order = 1)]public string Name { get; set; }[DataMember(Name = "MessageContract", IsRequired = true, Order = 2)]public string Message { get; set; }/*/// <summary>/// 使用IsRequired = true :重新生成效劳端代码,客户端不更新效劳,那么会引发异常/// 使用IsRequired = false:重新生成效劳端代码,客户端不更新效劳,那么不会引发异常/// </summary>[DataMember(Name = "CreateDateContract", IsRequired = true, Ord er = 3)]//[DataMember(Name = "CreateDateContract", IsRequired = false, Order = 3)]public DateTime CreateDate { get; set; }*/}注意注释局部。
WCF分布式开发步步为赢(15)错误契约(FaultContract)与异常处理(ExceptionHandle)
WCF分布式开发步步为赢(15):错误契约(FaultContract)与异常处理(ExceptionHandle)所属分类: WCF分布式开发步步为赢, SOA and EAI今天学习WCF分布式开发步步为赢系列的15节:错误契约(FaultContract)与异常处理(ExceptionHandle)。
本节内容作为WCF分布式开发的一个重要知识点,无论在学习还是项目中都应该有所了解。
此前也和多位学习爱好者讨论过WCF异常处理的相关知识。
这里就系统整理一下,共大家参考。
同时也是对《WCF分布式开发步步为赢》系列文章的完善和补充。
本节主要涉及的知识点就是:【1】.NET异常处理【2】WCF异常处理【3】错误契约【4】WCF异常处理扩展【5】示例代码分析,最后是【6】总结部分。
首先我们来回忆一下.NET里一个重要的概念异常处理ExceptionHandle。
异常处理在JAVA平台也有自己的机制,这个不是一个WCF特有的概念,同样要了解WCF的异常处理,我们有必要先来了解其前身.NET的异常处理相关的概念。
【1】.NET异常处理:.NET Framework 中的托管异常是凭借Win32 结构化异常处理机制实现的。
公共语言运行库提供了一个模型,以统一的方式通知程序发生的错误,这样为设计容错软件提供了极大的帮助。
所有的.NET Framework操作都通过引发异常来指示出现错误。
传统上,语言的错误处理模型依赖于语言检测错误和查找错误处理程序的独特方法,或者依赖于操作系统提供的错误处理机制。
运行库实现的异常处理具有下列特点:处理异常时不用考虑生成异常的语言或处理异常的语言。
异常处理时不要求任何特定的语言语法,而是允许每种语言定义自己的语法。
允许跨进程甚至跨计算机边界引发异常。
与其他错误通知方法(如返回代码)相比,异常具有若干优点。
不再有出现错误而不被人注意的情况。
无效值不会继续在系统中传播。
不必检查返回代码。