Я пытаюсь добавить свое собственное исключение в FaultException из моей службы WCF и перехватить его в моем клиенте WCF. Однако на стороне клиента исключение перехватывается как неуниверсальное исключение FaultException, и сведения о моем пользовательском исключении теряются.
Мое пользовательское исключение:
[Serializable] public class MyCustomException : ApplicationException
{ ... }
Вот как я это бросаю:
throw new FaultException<MyCustomException>(new MyCustomException("foo bar!"));
(Обратите внимание, что у меня есть [FaultContract (typeof (MyCustomException))]] поверх моего метода в интерфейсе)
А вот как я пытаюсь поймать это в моем клиенте:
...
catch (FaultException<MyCustomException> mcex)
{
Console.WriteLine(mcex);
}
catch (FaultException fex)
{
Console.WriteLine(fex);
}
Моя цель состоит в том, чтобы исключение было поймано в первом предложении catch, но в конечном итоге оно попадает во второе предложение catch.
Любопытно, что если я заменю MyCustomException на ApplicationException, то действительно FaultException будет правильно перехвачен.
Я предполагаю, что проблема в том, что MyCustomException сериализуется как Serializable (а не через DataContractSerializer), и что, возможно, мне не хватает какой-то дополнительной директивы WCF. Что-то в строке атрибута ServiceKnownType? (Хотя я пытался, но безрезультатно).