首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

抛出FaultException时WCF抛出CommunicationException

当在WCF(Windows Communication Foundation)中抛出FaultException时,会导致CommunicationException。这是因为FaultException是一种特殊类型的异常,它用于在服务操作期间传递错误信息。当FaultException被抛出时,WCF会自动将其转换为CommunicationException,这是因为FaultException是一种通信异常,而CommunicationException是WCF中的基本通信异常。

在处理FaultException时,可以使用try-catch语句来捕获异常,并在catch块中处理异常。例如:

代码语言:csharp
复制
try
{
    // 调用服务操作
}
catch (FaultException<MyFaultContract> ex)
{
    // 处理FaultException
}
catch (CommunicationException ex)
{
    // 处理CommunicationException
}

在上面的代码中,我们使用了泛型的FaultException来捕获特定的错误信息。这需要在服务操作中定义一个错误协定,并在服务操作中抛出FaultException。

总之,当在WCF中抛出FaultException时,会导致CommunicationException。为了处理这些异常,可以使用try-catch语句来捕获异常,并在catch块中处理异常。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WCF系列教程之WCF客户端异常处理

、使用客户端或者通过对象调用操作,或者关闭基础客户端通道,都会在客户端应用程序中出现异常,WCF是基于网络的通讯服务,错误异常也是要基于消息传递的,在WCF中提供了一个错误消息处理的类FaultException...(无效的操作异常)) 通常没有有效的方法来处理意外错误,所以通产不应该在调用WCF客户端捕获这些异常 2、预期异常:预期异常包括 (1)、TimeoutException (2)、CommunicationException...  (3)、CommunicationException 的任何派生类 上面这些异常表明在通信的过程中出现问题,该问题可以通过终止WCF客户端并报告通信故障而得到安全的处理,因为外部因素可能导致任何应用程序中出现这些错误...,所以正确的应用程序必须捕获这些异常并在发生异常进行恢复。...客户端接收到了服务器返回的除数不能为0的异常,然后抛出。 (2)、验证通讯超时的异常抛出,原理通过将连接后的时间设置为很小的值,那么服务端的运算肯定来不及,就会抛出超时的信息。

1.2K60

yield在WCF中的错误使用——99%的开发人员都有可能犯的错误

这是一个WCF相关的问题,我想99%的人都有可能会犯这样的错误——即使你对yield了解得非常透彻。闲话少说,我们通过一个简单的实例来说明这个问题。...如果category参数提供的字符串为Null或者是空字符串,抛出一个FaultException异常并提示“Invalid Category”,这样客户端在输入不合法参数的情况下可以得到错误消息。...return "Bar"; yield return "Baz"; } } 可是正常并不意味着正确,客户端其实根本无法得到服务端提供给它的错误消息,如下所示的是客户端调用服务指定一个空字符串参数情况下得到的错误...一个CommunicationException异常被抛出来,得到的错误消息为“An error occurred while receiving the HTTP response to http:/...这貌似和我们预期的效果不一样,我们希望的是客户端抛出一个FaultException,并提示“Invalid category”。

1.2K90
  • WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理

    在服务执行过程中,我们手工抛出FaultException异常,WCF服务端框架会对该异常对象进行序列化病最终生成Fault消息。...当WCF客户端框架介绍到该Fault消息之后,会做一项相反的操作:对Fault消息中进行解析和反序列化,重新生成并抛出FaultException异常。...WCF框架自动为我们作了这么多“幕后”工作,使得开发人员可以完全采用编写一般的.NET应用程序的模式进行异常的处理:在错误的地方抛出相应异常,对于潜在出错的方法调用进行相应的异常捕获和处理。...1: [Serializable] 2: public class FaultException : CommunicationException 3: { 4: //其他成员...MessageFormatter实现了在正常的服务调用过程中方法调用和消息之间的转换,但是,当异常(这里指的是FaultException异常)从服务端抛出WCF通过需要一个相似的组件实现类似的功能:

    1.5K110

    WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理

    而最终服务调用体现在消息的交换上,消息基于XML的(除了少部分非XML的消息,比如JSON)。从数据转化的角度上讲,WCF起到了一个将数据从这两种形态数据进行转化和适配的作用。...先通过下面的代码片段来看看FaultException的基本定义: 1: [Serializable] 2: public class FaultException : CommunicationException...3、 FaultException 当从服务端抛出异常,如果需要通过一个对象用于描述错误的消息信息,不管该对的类型是基元类型(比如String,Int等)还是自定义类型(比如自定义数据契约...在服务执行过程中,我们手工抛出FaultException异常,WCF服务端框架会对该异常对象进行序列化病最终生成Fault消息。...当WCF客户端框架介绍到该Fault消息之后,会做一项相反的操作:对Fault消息中进行解析和反序列化,重新生成并抛出FaultException异常。

    1.2K100

    WCF技术剖析之二十四: ServiceDebugBehavior服务行为是如何实现异常的传播的?

    服务端只有抛出FaultException异常才能被正常地序列化成Fault消息,并实现向客户端传播。...WCF内部是如何处理抛出的非FaultException异常的呢?...实际上,WCF对非FaultException异常的处理并不复杂,我们现在就来简单介绍一下相关的流程:在执行服务操作过程中,如果抛出一个非FaultException异常,WCF会先判断IncludeExceptionDetailInFaults...因此,在这种情况下,服务端抛出的信息总是能够原封不动地传递到客户端。而客户端捕获的总是一个泛型的FaultException异常。...同样以我们的计算服务为例,在Divide方法中我们直接用ExceptionDetail封装在运算过程中抛出的异常,最终抛出FaultException异常。

    84590

    WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理

    WCF客户端和服务端的框架体系相互协作,使得开发人员可以按照我们熟悉的方式进行异常的处理:在服务操作执行过程中抛出异常(FaultException),在调用服务捕获异常,完全感觉不到“分布式”的存在...为了实现这样的效果,WCF在内部为我们作了很多。 消息交换是WCF进行通信的唯一手段,消息不仅仅是正常服务调用请求和回复的载体,服务端抛出的异常,甚至是服务的元数据都是通过消息的形式传向客户端的。...我们可以这样来简单地描述WCF异常处理框架的功能实现:WCF服务端将抛出FaultException异常进行序列化,并根绝消息的SOAP规范(SOAP 1.1或SOAP 1.2)和WS-Addressing...反序列化的结果即实现对FaultException的重建,WCF最终将重建的FaultException异常抛出,对于最终的开发者而言,感觉就像服务端抛出FaultException直接被客户端捕获了一样...如果在执行过程中,抛出FaultException异常,WCF会获取当前DispatchOperation的FaultFormatter,调用Serialze方法对异常对象进行序列化。

    909100

    WCF技术剖析之二十一:WCF基本异常处理模式

    通过WCF基本的异常处理模式[上篇], 我们知道了:在默认的情况下,服务端在执行某个服务操作抛出的异常(在这里指非FaultException异常),其相关的错误信息仅仅限于服务端可见,并不会被WCF...一、 通过FaultException直接指定错误信息 对于执行服务操作中抛出的异常,如果服务的定义者仅仅希望服务的调用者得到一段自定义的错误信息文本(字符串),我们要做的实际上很简单:在服务操作中直接抛出一个...虽然在很多情况下,在服务端指定服务操作的过程中直接抛出含有自定义错误信息的FaultException异常,就能过客户端感知到遇到的具体错误并进行必要的排错和纠错。...在《WCF技术剖析(卷1)》中,我们曾多次对契约进行过深入的探讨。从抽象层面上讲,契约交互双方或者多方就某一问题达成的一种共识,使确保正常交互指定的一系列的规范。...也即是说,同样对于我们的计算服务的例子,如果服务端试图通过抛出一个FaultException来提供错误(如下面的代码所示),客户端最后捕获到的仅仅是一个FaultException异常

    1.2K110

    WCF技术剖析之二十一: WCF基本的异常处理模式

    一、当异常从服务端抛出 对于一个典型的WCF服务调用,我个人倾向于将潜在抛出的异常费为两种类型:应用异常(Application Exception)和基础结构(Infrastructure Exception...前者为应用级别,主要体现为执行某个服务操作的业务逻辑抛出的异常;而后者则是业务无关的,通过WCF本身的基础架构抛出,主要体现在对象的序列化、消息的处理、消息传输和消息的分发等等。...图2 客户端捕获从服务端抛出的异常 从上面的实例演示中,我们可以获知WCF在默认情况下的异常处理行为:对于服务端抛出的异常(这里主要指应用异常),客户端捕获到的总一个具有相同异常消息的System.ServiceModel.FaultException...对于所有从服务端抛出的异常,只有FaultException和直接或间接继承自FaultException的异常才能被序列化,并最终通过消息返回给服务的调用端。...也就是说,对于应用了开启IncludeExceptionDetailInFaults的ServiceDebug服务行为的WCF服务,在执行服务操作抛出的异常信息,可以通过包含在客户端捕获的FaultException

    783100

    Enterprise Library深入解析与灵活应用(8):WCF与Exception Handling AppBlock集成

    关键的是如何实现让EHAB处理客户端进行服务调用抛出的异常。 我们知道,客户端进行 服务调用抛出的异常类型总是FaultException(包括FaultException)。...采用这样的方式来直接处理调用WCF服务抛出的异常,显然具有很大的局限:如果服务不错任何处理,客户端捕获的永远是FaultException(不包括FaultException)异常,如果采用...当然,在服务端的操作实现中你可以根据具体的场景抛出FaultException异常,并通过不同类型的错误明细(TDetail)封装具体的错误信息,那么客户端就可以针对具体的FaultException...在ProvideFault方法中,先判断抛出的异常是否是FaultException,如果是则不作处理(在这种情况下,一般是服务提供者人为抛出的,并不希望再作进一步的处理)。...所以,将ServiceExceptionDetail作为错误契约必须的。

    539110

    WCF技术剖析之十:调用WCF服务的客户端应该如何进行异常处理

    一、异常的抛出与Close的失败 一般情况下,当服务端抛出异常,客户客户端的服务代理不能直接关闭,WCF在执行Close方法的过程中会抛出异常。我们可以通过下面的例子来证实这一点。...WCF服务在客户端的调用程序如下所示: 1: using System; 2: using System.ServiceModel; 3: using Artech.ExceptionHandlingDemo.Contracts...在上面一篇文章中,我们就谈到过:WCF通过信道栈实现了消息的编码、传输及基于某些特殊功能对消息的特殊处理,而绑定对象是信道栈的缔造者,不同的绑定类型创建出来的信道栈具有不同的特性。...一般情况下,对于客户端来说,信道在下面两种情况下状态会变成Faulted: 调用超时,抛出TimeoutException 调用失败,抛出CommunicationException 所以正确的客户端进行服务调用的代码应该如下面的代码所示...下面的代码演示了基于ChannelFactory创建服务代理的WCF客户端编程方式,对于直接通过强类型服务代理(继承ClientBase的服务代理类型)进行服务调用具有相同的结构。

    2K90

    快速入门系列--WCF--04元数据和异常处理

    该部分主要涉及WCF提供的异常处理模型和对WCF异常处理底层实现的分析,包括异常的序列化和反序列化、异常的传播、异常的屏蔽等。对于非分布式的单进程应用,异常处理无非就是简单的抛出异常和捕获异常而已。...异常的封送(Exception Marshaling):服务端抛出的异常如何进行序列化以便能够传递到客户端。...敏感信息的屏蔽(Sensitive Information Shielding):抛出的异常常常包含敏感信息,直接将服务操作执行过程抛出的异常直接返回客户端,存在较大安全隐患。...在WCF中,所有的异常信息都是通过FaultException类来传播的,可以通过其泛型参数来传播自定义的信息。...WCF并不直接进行FaultException异常和错误消息之间的交换,其通过一个System.ServiceModel.Channels.MessageFault对象来完成,此外消息的格式化通过FaultFormatter

    81380

    WCF实现将服务器端的错误信息返回到客户端

    WCF实现将服务器端的错误信息返回到客户端 2011-12-21 11:37 by Ref Tian, 398 visits, 收藏, 编辑 最近在园子里转看到有人对如题的实现有疑问,今天有时间就写了项目把实现简单的讲解一下...,如果你是牛逼人物那就绕道吧,哥不想浪费你的时间,现在开始: 默认WCF是不允许将服务器的异常信息返回到客户端的(主要是客户端不一定能够识别clr的异常信息),如果你有这方面的需求可以通过SOAP的Fault...如果有異常就返回下面定義的數據契約的結構數據 2.使用系统的异常类型         [FaultContract(typeof(DivideByZeroException))] 在契约实现类中将异常抛出...throw new FaultException(new DivideByZeroException("這個是自定義的異常!"))...FaultException exception:这个抓取的是系统异常类型 注意这里获取异常的信息的方法是exception.Detail.Message,

    1.1K10

    yield在WCF中的错误使用——99%的开发人员都有可能犯的错误

    的例子 再次回到《yield在WCF中的错误使用——99%的开发人员都有可能犯的错误[上篇]》中提到的例子,现在来解释为什么针对如下两段代码,前者抛出的异常不能被WCF正常处理,而后者可以。...原因很简单——两段代码抛出异常的时机是不一样的。...对于后者,异常在执行GetItems方法的时候会立即抛出来,WCF会捕获这个异常并作为应用级别的异常进行正常处理;对于前者,通过上面的分析我们知道异常实际上发生在对返回“集合对象”进行迭代的时候。...其实就是对返回对象进行序列化的时候,此时抛出的异常将将会视为系统异常来处理。...(string categoty) { if (string.IsNullOrEmpty(categoty)) { throw new FaultException

    1.6K90
    领券