Обработка ошибок службы данных WCF - PullRequest
6 голосов
/ 02 марта 2011

Я создал службу данных WCF с операцией службы.

Я хочу создать своего рода исключение для бизнеса.Я пытаюсь сгенерировать WebFaultException, но не вижу, как перехватить эту ошибку на стороне клиента, когда эта ошибка генерируется сервисной операцией.

Вот моя сервисная операция для имитации исключения:

[WebGet] 
public void GenerateException() 
{
    throw new DataServiceException( 403, "Custom Message" );
}

Вот мой клиент:

WebClient wc = new WebClient(); 
wc.DownloadString(
    new Uri(
      "http://localhost:27820/WcfDataService1.svc/GenerateException"
    )
);

DownloadString выдает исключение, но только Internal Server Error, я не вижу свой Custom Message.

Есть идеи?

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

Ответы [ 3 ]

3 голосов
/ 22 ноября 2011

Вы можете использовать атрибут FaultContract WCF для создания и обработки исключения Businzess.

Ссылка Ссылка , Пример

3 голосов
/ 19 октября 2011

Лучше всего выбросить DataServiceException .Среда выполнения службы данных WCF знает, как сопоставить свойства с ответом HTTP, и всегда обернет его в TargetInvocationException .

. Затем можно распаковать его для клиента-клиента, переопределив исключение HandleException вваш DataService вроде так:

    /// <summary>
    /// Unpack exceptions to the consumer
    /// </summary>
    /// <param name="args"></param>
    protected override void HandleException(HandleExceptionArgs args)
    {
        if ((args.Exception is TargetInvocationException) && args.Exception.InnerException != null)
        {
            if (args.Exception.InnerException is DataServiceException)
                args.Exception = args.Exception.InnerException as DataServiceException;
            else
                args.Exception = new DataServiceException(400, args.Exception.InnerException.Message);
        }
    }
0 голосов
/ 21 апреля 2013

Я решил свою ошибку 403 с помощью Set EntitySetAccessRule для AllRead:

         config.SetEntitySetAccessRule("*", EntitySetRights.AllRead);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...