Можно ли получить службу WCF для возврата «ошибки» клиенту? Я уверен, что это возможно при использовании SOAP, но я хотел бы вернуть JSON.
В идеале код ответа HTTP должен быть установлен на что-то, указывающее, что произошла ошибка, и тогда подробности проблемы будут доступны в ответе JSON.
В настоящее время я делаю что-то вроде этого:
[ServiceContract]
public class MyService
{
[OperationContract]
[WebInvoke(BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
[FaultContract(typeof(TestFault))]
public MyResult MyMethod()
{
throw new FaultException<TestFault>(new TestFault("Message..."), "Reason...");
}
}
Где TestFault
выглядит так:
[DataContract]
public class TestFault
{
public TestFault(string message)
{
this.Message = message;
}
[DataMember]
public string Message { get; set; }
}
В данный момент в настройке сервиса нет ничего особенного.
В результате получается ответ «400 Bad Request» с ошибкой в формате HTML. (Когда я includeExceptionDetailInFaults
, я вижу «Причину ...» и подробности FaultException
, но нет подробностей о TestFault
.)
Веб-служба возвращает JSON в порядке, если Exception
(или FaultException
) не выбрасывается.
Любые предложения ..?