




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WCF分布式开发步步为赢(15):错误契约(FaultContract)与特别处理(ExceptionHandle)所属分类:WCF分布式开发步步为赢,SOAandEAI15WCF分布式开发步步为赢(15):错误契约(FaultContract)与特别处理(ExceptionHandle)所属分类:WCF分布式开发步步为赢,SOAandEAI处理扩展【5】例如代码分析,最终是【6】总结局部。ExceptionHandleJAVA平台也有WCFWCF的特别处理,我们有必要先来了解其前身.NET的特别处理相关的概念。.NET特别处理:.NETFrameworkWin32构造化特别处理机制实现的。公共语言运行库供给了一个模型,以统一的方式通知程序发生的错误,这样为设计容错软件供给了极大的帮助。全部操作都通过引发特别来指示消灭错误。传统上,语言的错误处理模型依靠于语言检理具有以下特点:处理特别时不用考虑生成特别的语言或处理特别的语言。允许跨进程甚至跨计算机边界引发特别。与其他错误通知方法〔如返回代码〕相比,特别具有假设干优点。不再有消灭错误而不被人留意的状况WindowsC++错误处理更快。非托管代码可以同时包含C++样式的 SEH COM的HRESULT。try、catchfinally关键字尝试某些操作,以处理失败状况,尽管这些操作有可能失败,但假设您确定需要这样做,且期望在事后清理资源,就可以尝试这样做。公共语言运行时(CLR)、.NETFrameworkthrow关】WCF特别处理:WCF.NET的特别处理机制。WCF也是.NETWCF并不支持.NETWCF则不会。】WCF错误类型:WCF分布式应用开发的过程中,我们客户端常常会遇到一下三种常见的错误。CommunicationException;Fault,等问题,这个比较常见。一般通道闲置时State来推断。安全验证失败也会导致这个错误。。第三种是我们本节要具体表达的类型。【2.2】FaultException:序列化,也就不能在客户端和效劳端实现共享错误信息。WCF效劳中承受传统的方式处理特别,由于特别消息不能被序列化,因而客户端无法捕获WCFFaultException。这个是一个基于行业标准的特别对象,因此,可以把错误信[Serializable,KnownType(typeof(FaultReasonData[])),KnownType(typeof(FaultCodeData)),KnownType(typeof(FaultCodeData[])),[Serializable,KnownType(typeof(FaultReasonData[])),KnownType(typeof(FaultCodeData)),KnownType(typeof(FaultCodeData[])),KnownType(typeof(FaultReasonData))]publicclassFaultException:CommunicationException{//Fieldsprivatestringaction;privateFaultCodecode;privateMessageFaultfault;internalconststringNamespace=“:///Mic““:///Microsoft/WindowsCommunicationFoundation/2005/08/Faults/“;privateFaultReasonreason;//MethodspublicFaultException;}Serializable.Code这里我们可以使用任何系统类型或者自定义类型来传递错误信息,T代表要传递的错误细节。此类也可以使用反射器查看代码:Code的特别处理,这里就必需介绍一下一个重要的概念:错误契约〔FaultContract〕。FaultContract。FaultException类型传递到客户端。[AttributeUsage(AttributeTargets.Method,AllowMultiple=true,Inherited=false)]public[AttributeUsage(AttributeTargets.Method,AllowMultiple=true,Inherited=false)]publicsealedclassFaultContractAttribute:Attribute{//Fieldsprivatestringaction;privateboolhasProtectionLevel;privatestringname;.}大契约中的一种〔Service).声明一个效劳操作契约方法为FaultException<T>的类型全都。】WCF特别处理扩展:接口:的定义如下:publicpublicinterfaceIErrorHandler{//MethodsboolHandleError(Exceptionerror);voidProvideFault(Exceptionerror,MessageVersionversion,refMessagefault);}方法后再返回给客户端。ProvideFault不考虑特别的类型。FaultExceptino<log日志。IErrorHandle,需要将它添加到对应的分发器里即可。接口IServiceBehavior的主要方法ApplyDispatchBehavior:publicpublicinterfaceIServiceBehavior{//MethodsvoidAddBindingParameters(ServiceDescriptionserviceDescription,ServiceHostBaseserviceHostBase,Collection<ServiceEndpoint>endpoints,BindingParameterCollectionbindingParameters);voidApplyDispatchBehavior(ServiceDescriptionserviceDescription,ServiceHostBaseserviceHostBase);voidValidate(ServiceDescriptionserviceDescription,ServiceHostBaseserviceHostBase);}【5】例如代码分析:下面我们给出本节文章的简洁例如代码。【5.1】效劳端:WCF的特别处理,SayHelloSayGoodBye。OverflowException内存溢出的特别,FaultContract特性。定义代码如下://1.效劳契约[ServiceContract(Namespace=“://cnblogs/frank_xl/““://cnblogs/frank_xl/“)]publicinterfaceIWCFService{//操作契约[FaultContract(typeof(OverflowException))]//标注以后,WCF客户端才能区分错误契约,否则会作为通信特别抛出stringSayHello(stringname);//操作契约stringSayGoodBye(stringname);}//2.效劳类,继承接口。实现效劳契商定义的操作publicclassWCFServiceIWCFService{//实现接口定义的方法publicstringSayHello(stringname){if(name.Length<10){Console.ForegroundColor=ConsoleColor.Green;Console.WriteLine(“Hello!{0},return“Hello!“+name;}
“,name);P的错误消息
else{//泛型类FaultException,可以包含不同的特别,可以序列化。基于SOAOverflowExceptionoe=newOverflowException;thrownewFaultException<OverflowException>(oe,“nameLengthismorethan10“);}}//实现接口定义的方法publicstringSayGoodBye(stringname){if(name.Length<10){Console.ForegroundColor=ConsoleColor.Green;Console.WriteLine(“GoodBye!{0},return“Hello!“+name;
“,name);}}else{OverflowExceptionoe=newOverflowException;thrownewFaultException<OverflowException>(oe,“nameLengthismorethan10“);}}}【5.2】宿主:WCF效劳。会打印每次的调用信息。比较简洁,代码如下:staticvoidMain(string[]args){//反射方式创立效劳实例,//Using方式生命实例,可以在对象生命周期完毕时候,释放非托管资源using(ServiceHosthost=newServiceHost(typeof(WCFService.WCFService))){“,host.State);ints)
////推断是否以及翻开连接,假设尚未翻开,就翻开侦听端口if(host.StateCommunicationState.Opening)host.Open;//显示运行状态Console.ForegroundColor=ConsoleColor.Yellow;Console.WriteLine(“Hostisruning!andstateis{0}Console.ForegroundColor=ConsoleColor.Red;//printendpointinformationforeach(ServiceEndpointseinhost.Description.Endpo{Console.WriteLine(“Hostislisteningat{0}“,se.Address.Uri.ToString);}}【5.3】客户端:
}Console.Read;//WSBinding_IWCFServiceTest.WCFServiceClientwcfServiceProxy=//WSBinding_IWCFServiceTest.WCFServiceClientwcfServiceProxy=newTest.WCFServiceClient(“WSBinding_IWCFService“);erviceClient(“WSBinding_IWCFService“);//SayHello效劳try{Console.WriteLine(wcfServiceProxy.SayHello(“FrankXu“));Console.WriteLine(wcfServiceProxy.SayHello(“FrankXuLeiWSBinding“));}catch(FaultException<OverflowException>oe){Console.WriteLine(oe.Message);}catch(CommunicationExceptionce){Console.WriteLine(ce.Message);}finally{wcfServiceProxy.Close;}//ForDebugConsole.WriteLine(“PressanykeytoexitConsole.Read;“);【6】总结:WCF特别处理的全部内容。一下几点我们要留意:FaultException特别,客户端也可以获得特别消息,该特别会导致通道消灭错误。FaultException特别信息,但该
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CAZG 014-2022动物园动物疫病监测管理规范
- T/CAS 413-2020排水管道检测和非开挖修复工程监理规程
- T/CAQI 46-2018家用和类似用途饮用水处理装置用龙头
- T/CAPEC 3-2018汽轮机制造监理技术要求
- 疾控中心面试题及答案
- 村务员面试题及答案
- 花式考试题型及答案
- 环境教育考试题及答案
- 青年直肠癌的临床护理
- 员工爱岗敬业主题演讲稿
- 普通测量学试题及答案
- 国家开放大学2025年《创业基础》形考任务3答案
- 医疗器械网络销售质量管理规范宣贯培训课件2025年
- 语文课程资源的开发与利用
- 2024年09月四川天府新区人民医院招聘6人笔试历年专业考点(难、易错点)附带答案详解
- GB/T 26354-2025旅游信息咨询服务
- 导数常考题型全归纳(七大题型)解析版-2025年高考数学复习热点题型专项训练(新高考)
- 油船实操考试题及答案
- 课题申报书:数字化升级背景下婴幼儿托育服务与管理专业“五金”建设实践研究
- T-CMAM Z13-2022 庆巴洒曲(肝硬化腹水)藏医诊疗指南
- 2025-2030全球及中国网络访问控制(NAC)解决方案行业市场现状供需分析及市场深度研究发展前景及规划可行性分析研究报告
评论
0/150
提交评论