Хорошо, я знаю, что здесь что-то не хватает. У меня есть следующий контракт операции:FaultException <T>() исключение, вызванное службой, не улавливается улавливанием клиента (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());
}
В приведенном выше случае улов (FaultException ехр) (первый блок поймать с ArgumentException в коде клиента) блок не выполняется. Однако, когда я удаляю ArgumentException, чтобы иметь catch (FaultException exp), выполняется тот же блок catch. Я не уверен в этом, поскольку я бросаю FaultException из моего контракта на операцию. Я что-то пропустил здесь.
Цените вашу помощь, Ashish
EDIT: - Когда я обновил ссылку на службу в моем клиенте, я был в состоянии поймать FaultException<ArgumentException>
исключение.
Абсолютно. Если у вас есть собственный класс исключений и его использовать, чтобы бросить и поймать, он работает. Не уверен, почему он не будет работать (сериализоваться) с ArgumentException. –
@Ashish: нет причин для сериализации «Исключение» с помощью DataContractSerializer. Не используйте исключения как тип неисправности. Они не будут отображаться должным образом как ошибки SOAP для клиентов. Это не то, о чем говорят SOAP Faults. –
спасибо за ответ. Я очень новичок в WCF и понимаю, что вы, вероятно, будете использовать свой собственный класс исключений как DataContract, а не использовать систему «Исключение» (или ее классы). –