好的,我知道我在这里缺少什么。我有以下运营合同:

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使其具有catch(FaultException exp)时,将执行相同的catch块。我不确定这是因为我从操作合同中抛出了FaultException。我在这里想念什么吗?

感谢你的帮助,
阿什什

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

最佳答案

使用FaultException<DataContract>尝试某些任意数据协定类型。如果您查看代理类中故障的生成代码,我敢打赌,您会看到ArgumentException并未按照您期望的方式进行序列化。

10-08 00:27