Создание 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, когда условие (данные не обрабатываются так долго) выполняется.
Я пропускаю какой-то важный или тонкий факт?