El FaultException es un caso especial en WCF. Su intención es indicar que algo sucedió en el lado del servicio que fue un error, pero al mismo tiempo, no es culpa del canal. Esto tiene sentido, dado que puede incorporar esta información en el contrato usando el FaultContractAttribute para exponer lo que se puede esperar de un contrato.
Otras excepciones no son realmente traducibles en el mundo WS. Las excepciones son una abstracción específica de la tecnología, y cada pila de tecnología tiene una representación diferente de esa abstracción (o en algunos casos, ninguna).
Dicho esto, cuando una excepción que es no una excepción de fallo se lanza en el lado del servidor, que es visto como catastrófica por el tiempo de ejecución de WCF, y el canal deben ser criticado, ya que no es conocida si puedes continuar o no.
Sin embargo, al usar FaultException, implica que tiene alguna previsión de las condiciones en torno a por qué se lanzó y si el canal subyacente se ha visto afectado o no.
Gracias por la explicación. Estaba pensando en eso, solo quería asegurarme de que era correcto – pdiddy
@pdiddy: No hay problema, mucha gente no se da cuenta de que WCF no tiene la intención de asignar todo en .NET directamente al mundo WS, hay algunos cosas muy reales que debes saber al respecto. – casperOne