Создание FaultException в методе с FaultContract не работает

Я читал о FaultContract и подумал, что это удобно. Поэтому я пошел украшать некоторые из моих методов с

  [OperationContract]
  [FaultContract(typeof(MyFault)]
  string DoTransform(string somethingUseless);

Затем в коде сервера я намеренно выбрасываю исключение FaultException при получении определенного ввода.

На стороне клиента все CodeDom было восстановлено с использованием SvcUtil, и я вижу FaultContracts в клиенте службы и т. Д.

В форме клиента у меня есть попытка / ловить, чтобы поймать FaultException, а также.

Проблема заключается в том, что когда я вызываю контракт операции с данными, которые, как предполагается, намеренно вызывают ошибку, служба генерирует новое исключение FaultException. Я ожидал, что он будет перехвачен клиентом, но нет, вместо этого я получил сообщение CommunicationException, которое не было обработано.

Он работает нормально с обычным вводом, но когда я даю ввод, который будет использовать FaultContract для того же контракта операции, вместо получения FaultException, я получаю CommunicationException. Если я удаляю оператор if, который условно выдает исключение, то все в порядке.

Я делаю все, как описано в http://msdn.microsoft.com/en-us/library/ms752208.aspx только с разными именами. Так что, если я ничего не делаю с этим, он работает нормально, если, с другой стороны, я использую это:

 long digits;
 if (!long.TryParse(data, out digits))
    throw new FaultException<MyFault>(new MyFault("dummy thing"));

тогда я получаю CommunicationException, когда условие (данные не обрабатываются так долго) выполняется.

Я пропускаю какой-то важный или тонкий факт?

0 ответов

Другие вопросы по тегам