Shiflexception () Исключение, брошенное службой не поймано клиентом (FileSexception )

StackOverflow https://stackoverflow.com/questions/3032303

Вопрос

Хорошо, я знаю, что что-то здесь не хватает. У меня есть следующий договор операции:

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

В приведенном выше случае PALV (FILLEXCECTION EXP) (первый закладной блок с ArgumentException в блоке клиентского кода) не выполняется. Однако, когда я удаляю ArtiCeException, чтобы уловить (FALLEXCECKECTION EXP), тот же блок уловки выполняется. Я не уверен в этом, так как я бросаю FairtException из моего оперативного договора. Я ничего не пропускаю здесь.

Цените вашу помощь, ашиш

Редактировать: - Когда я обновил ссылку на обслуживание в моем клиенте, я смог поймать FaultException<ArgumentException> исключение.

Это было полезно?

Решение

Попробуйте это с FaultException<DataContract> Для некоторых произвольных данных договора данных. Если вы посмотрите на сгенерированный код для неисправности в классе прокси, держу пари, вы увидите, что ArgumentException не является сериализацией того, как вы ожидаете.

Другие советы

Если вы получаете класс исключения, убедитесь, что ваш пользовательский исключение имеет конструктор сериализации

protected MyCustomException(
          SerializationInfo info,
          StreamingContext context)
            : base(info, context) { }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top