FaultException - это особый случай в WCF. Это означает, что на стороне службы произошло что-то, что было ошибкой, но в то же время не было неисправности канала. Это имеет смысл, учитывая, что вы можете встраивать эту информацию в контракт, используя FaultContractAttribute , чтобы показать, что можно ожидать от контракта.
Другие исключения на самом деле не переводимы в мире WS. Исключения представляют собой абстракции, зависящие от технологии, и каждый технологический стек имеет различное представление этой абстракции (или, в некоторых случаях, вообще никакого).
Тем не менее, когда исключение, которое не , генерирует исключение сбоя на стороне сервера, оно считается катастрофическим для среды выполнения WCF, и канал должен неисправен, так как неизвестно, можете ли вы продолжить или нет.
Однако, используя FaultException, это подразумевает, что у вас есть некоторое предвидение условий вокруг того, почему он был брошен, и независимо от того, был ли затронут основной канал или нет.