繁体   English   中英

FaultException异常 <T> ()服务引发的异常未被客户端catch捕获(FaultException <T> )

[英]FaultException<T>() exception thrown by the service is not caught by the client catch(FaultException<T>)

好的,我知道我在这里遗漏了一些东西。 我有以下操作合同:

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;
}

以下内容取自客户: -

  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以捕获(FaultException exp)时,会执行相同的catch块。 我不确定这一点,因为我从我的操作合同中抛出FaultException。 我在这里遗漏了什么。

感谢你的帮助,Ashish

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

对于某些任意数据协定类型,请使用FaultException<DataContract>进行尝试。 如果你看一下代理类中生成的错误代码,我敢打赌你会发现ArgumentException没有按照你期望的方式序列化。

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

protected MyCustomException(
          SerializationInfo info,
          StreamingContext context)
            : base(info, context) { }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM