По умолчанию WCF будет , а не возвращать любые подробности исключений - это требуемая особенность, чтобы не сообщать слишком много информации возможному злоумышленнику.
Если вы хотите включить подробные сообщения об исключениях, вы можете сделать это, включив поведение на стороне сервера:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="debugBehavior">
<serviceDebug includeExceptionDetailInFaults="True" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="YourService"
behaviorConfiguration="debugBehavior">
.....
</service>
</services>
Но даже сейчас - вы должны знать, что WCF должен быть совместимым, поэтому клиент может не работать в .NET -> поэтому вы не можете просто отбросить исключение - это специфическая для .NET конструкция.
Лучший вариант - перехватить все исключения на сервере (например, с помощью интерфейса IErrorHandler ) и превратить их в ошибки SOAP - совместимый эквивалент исключения .NET. Если вы знаете, что другой конец всегда является клиентом .NET, вы можете легко преобразовать исключение .NET в FaultException<T>
, где T - ваше исключение .NET.
Когда вы делаете это, вы можете поймать исключение на клиенте, перехватив FaultException<T>
, и его свойство .Detail
должно содержать обычное исключение .NET, как вы его знаете (и оно содержит свойство .Message
с сообщение об исключении).