kicknwing
kicknwing

Reputation: 23

WCF newbie - is FaultException<T> safe for non-.NET clients?

WCF Newbie alert. I'm reading "Learning WCF" and "Programming WCF Services" where both books recommend throwing FaultException<T>. If T is .NET type "DivideByZeroException" and assuming a FaultContract exists with

[FaultContract(typeof(DivideByZeroException))]

on method "Divide", will a non-.NET client consuming that WCF service and method be able to understand and process that .NET exception? If yes, is it because the type info (DivideByZeroException) is part of the metadata (because of the FaultContract) that the client has access to and uses?

Thanks for any help.

Upvotes: 0

Views: 368

Answers (1)

carlosfigueira
carlosfigueira

Reputation: 87238

You can throw a FaultContract<DivideByZeroException>, but in general you shouldn't do that, exactly for the reason you mentioned (*). What is usually recommended is to have a data contract with the information from the exception, such as the exception message, and then have a FaultContract of that type.

[DataContract]
public class MyErrorDetails
{
    [DataMember]
    public string ErrorCode { get; set; }
    [DataMember]
    public string ErrorMessage { get; set; }
}

And then use

[FaultContract(typeof(MyErrorDetails))]

(*) Another reason to avoid returning exceptions as faults is that they disclose more information to the client than the client needs; things such as the stack trace are serialized by the exception, but that's some information internal to the service and shouldn't be sent to clients.

Upvotes: 1

Related Questions