Básicamente, en un servicio WCF, lo mejor es que solo arroje FaultException
(o FaultException<T>
).
Esto se debe a dos cosas: dado que WCF está diseñado para ser interoperable (su cliente podría ser una aplicación que no sea .NET), no debería usar excepciones .NET, que son demasiado específicas de la plataforma. Y dos: si usa FaultExceptions (que se traducen en fallas SOAP), su canal (la conexión entre el cliente y el servidor) no se desmantelará, o "fallará". El tiempo de ejecución de WCF en el lado del servidor trata todas las excepciones de .NET no gestionadas como excepciones "graves" y, por lo tanto, pone el canal en un estado de error, suponiendo que algo realmente malo ha sucedido.
Si su canal tiene una falla, ya no puede usarlo, tendrá que cerrar su proxy de cliente y volver a crearlo desde cero.
Si usted quiere (o tiene que) ser muy interoperable, definiría sus errores SOAP son culpa contrae (análogo a los contratos de datos) en un archivo separado, y luego se tiraría FaultException<T>
donde T habría uno de tus contratos de falla Si eres estrictamente .NET en cualquier lado, también puedes incluir excepciones .NET en FaultException como tipo genérico T, si quieres, el canal no tendrá fallas (por ejemplo, podrías lanzar un FaultException<InvalidOperationException>
y así devolver la señal de lo que pasó incorrecto).
Una gran explicación, me gustaría poder votar dos veces. Gracias. – Noich