首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >由服务引发的FaultException<T>()异常不会被客户端捕获(FaultException<T>)捕获

由服务引发的FaultException<T>()异常不会被客户端捕获(FaultException<T>)捕获
EN

Stack Overflow用户
提问于 2010-06-13 13:00:05
回答 2查看 4.2K关注 0票数 3

好吧,我知道我漏掉了什么东西。我有以下操作合同:

代码语言:javascript
运行
复制
public double DivideByZero(int x, int y)
{                   
    if (y == 0) 
    { 
        throw new FaultException<ArgumentException>
          (new ArgumentException("Just some dummy exception")
          ,new FaultReason("some very bogus reason"), new FaultCode("007"));
    }
    return x / y;
}

以下是客户的资料:

代码语言:javascript
运行
复制
  Console.WriteLine("Enter the x value");
  string x = Console.ReadLine();
  Console.WriteLine("Enter the Y value");
  string y = Console.ReadLine();
  try
  {
      double val = client.DivideByZero(Convert.ToInt32(x), Convert.ToInt32(y));
      Console.WriteLine("The result is " + val.ToString());
  }
  catch(FaultException<ArgumentException> exp)  
  {
      Console.WriteLine("An ArgumentException was thrown by the service "+ exp.ToString());    
  }
  catch (Exception exp)
  {
      Console.WriteLine(exp.ToString());
  }

在上述情况下,catch(FaultException exp) (客户端代码中带有ArgumentException的第一个catch块)块不会被执行。但是,当我将ArgumentException删除为具有catch(FaultException exp)时,将执行相同的catch块。我不确定这一点,因为我是从我的操作合同FaultException。我在这里有遗漏什么吗。

感谢你的帮助,阿什

编辑:-当我在客户端更新服务引用时,我能够捕获到FaultException<ArgumentException> 异常.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-13 13:18:32

对于一些任意的数据契约类型,可以使用FaultException<DataContract>进行尝试。如果您查看代理类中生成的错误代码,我敢打赌您将看到ArgumentException没有按您预期的方式序列化。

票数 3
EN

Stack Overflow用户

发布于 2011-08-09 00:34:34

如果要派生异常类,请确保自定义异常具有序列化构造函数。

代码语言:javascript
运行
复制
protected MyCustomException(
          SerializationInfo info,
          StreamingContext context)
            : base(info, context) { }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3032303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档