好吧,我知道我漏掉了什么东西。我有以下操作合同:
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> 异常.。
发布于 2010-06-13 13:18:32
对于一些任意的数据契约类型,可以使用FaultException<DataContract>进行尝试。如果您查看代理类中生成的错误代码,我敢打赌您将看到ArgumentException没有按您预期的方式序列化。
发布于 2011-08-09 00:34:34
如果要派生异常类,请确保自定义异常具有序列化构造函数。
protected MyCustomException(
SerializationInfo info,
StreamingContext context)
: base(info, context) { }https://stackoverflow.com/questions/3032303
复制相似问题