Как указать разрешенные исключения в файле конфигурации WCF? - PullRequest
0 голосов
/ 11 мая 2010

Я создаю набор служб 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 отключен, но я думаю, что давно видел некоторую конфигурацию, позволяющую некоторым исключениям / сбоям проходить через границы службы.

Есть ли такая вещь, как это? Если нет, что вы предлагаете для моего случая?

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 12 мая 2010

Нет, я так не думаю - если для параметра includeExceptionDetails задано значение false, все исключения будут общими (и так задумано). Я не знаю ни одной "лазейки", чтобы в этом случае подробно отображались некоторые неисправности.

0 голосов
/ 11 мая 2010

чтобы вернуть исключение, вам нужно добавить над реализацией вашего сервиса атрибут поведения сервиса в этом формате: [servicebehavior (ReturnUnknownExceptionAsFaults = true)] обратите внимание, что этот подход должен использовать только для отладки

Liran.

...