Обработка исключений в RIA Service - PullRequest
14 голосов
/ 23 апреля 2011

Как вы знаете, рекомендуется обрабатывать исключения, используя FaultException со стандартным сервисом WCF, чтобы скрыть детали исключений.Это нормально, но у меня проблемы с сервисом WCF Ria.Я хочу выбросить исключение из службы домена, и клиент обработает это исключение.Я хочу избежать раскрытия конфиденциальной информации об исключении, такой как трассировка стека, имена методов и т. Д. Если бы это была стандартная служба WCF, я бы использовал исключение FaultException, но в службе Ria это не работает.Независимо от того, какое исключение я выбрасываю из службы домена, клиент всегда получает исключение DomainOperationException.Можно ли как-нибудь выдать исключение FaultException клиенту silverlight из службы домена (чтобы не раскрывать фактические сведения об исключении)?Например, у меня есть окно входа в систему.Когда пользователь нажимает кнопку входа в систему, должно быть несколько ошибок проверки, таких как:

  • Неверное имя пользователя или пароль
  • Учетная запись пользователя заблокирована
  • Учетная запись неактивировано
  • и т. д.

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

Ответы [ 3 ]

11 голосов
/ 28 апреля 2011

Вот что Колин Блэр ответил на мой вопрос здесь

В DomainService есть переопределенный метод с именем OnError.Всякий раз, когда есть исключение в самом DomainService (не в коде WCF), исключение будет передано OnError, прежде чем оно будет переброшено для отправки обратно клиенту.Если вы замените исключение в DomainServiceErrorInfo, переданное в метод OnError, своим собственным исключением, то ваше исключение будет отправлено обратно клиенту.Если вы используете исключение DomainException для своего исключения, вы сможете передать целое число ErrorCode, которое вы можете использовать на стороне клиента для определения фактической ошибки.

Это отвечает на мой вопрос и потребности.Спасибо Колин.

0 голосов
/ 02 марта 2017

Пример кода:

[EnableClientAccess()]
public class YourDomainService : DomainService
{
    protected override void OnError(DomainServiceErrorInfo errorInfo)
    {
            base.OnError(errorInfo);

            customErrorHandler(errorInfo.Error);
    }

    private void customErrorHandler(Exception ex)
    {
            DomainServiceContext sc = this.ServiceContext;

            //Write here your custom logic handling exceptions
    }
}
0 голосов
/ 24 апреля 2011

Я читал об использовании ошибок WCF в Silverlight, но еще не пробовал с WCF RIA.

http://mark.mymonster.nl/2011/02/10/make-use-of-wcf-faultcontracts-in-silverlight-clients/

...