Я создаю набор служб WCF для внутреннего использования во всех наших приложениях. Для обработки исключений я создал класс ошибок по умолчанию, чтобы я мог возвращать обработанное сообщение вызывающей стороне, если это так, или общее, когда я понятия не имею, что произошло.
Неисправность контракта:
<code>
[DataContract(Name = "DefaultFault", Namespace = "http://contoso.com/api/2010/03")]
public class DefaultFault
{
public DefaultFault(DefaultFaultItem[] items)
{
if (items == null || items.Length== 0)
{
throw new ArgumentNullException("items");
}
StringBuilder sbItems = new StringBuilder();
for (int i = 0; i
Указание, что мой метод может выдать это исключение, чтобы клиент-потребитель знал об этом:
[OperationContract(Name = "PlaceOrder")]
[FaultContract(typeof(DefaultFault))]
[WebInvoke(UriTemplate = "/orders", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, Method = "POST")]
string PlaceOrder(Order newOrder);
</code>
Большую часть времени мы будем использовать только связь .NET с .NET с обычными связываниями, и все работает нормально, поскольку мы говорим на одном языке. Однако, как вы можете видеть в объявлении контракта на обслуживание, у меня есть атрибут WebInvoke (и привязка webHttp), чтобы иметь возможность также говорить с JSON, поскольку одно из наших приложений будет создано для iPhone, а этот парень будет говорить с JSON.
Моя проблема заключается в том, что всякий раз, когда я выкидываю исключение FaultException и включаю в конфигурационный файл includeExceptionDetails = "false", вызывающий клиент получит общую ошибку HTTP вместо моего пользовательского сообщения.
Я понимаю, что это правильное поведение, когда includeExceptionDetails отключен, но я думаю, что давно видел некоторую конфигурацию, позволяющую некоторым исключениям / сбоям проходить через границы службы.
Есть ли такая вещь, как это? Если нет, что вы предлагаете для моего случая?
Большое спасибо!