Обработка исключений в службе RIA

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

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

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

Ответы

Ответ 1

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

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

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

Ответ 3

Пример кода:

[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
    }
}