Вопрос

Передать сообщение из исключения клиенту

Добрый день, как передать клиенту сообщение, которое я передаю в брошенное исключение в кастомной сервисе? Спасибо.

Нравится

3 комментария
Лучший ответ

Илья Белов,

Примерно так:

[OperationContract]
        [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json)]
        public object SomeServiceMethod(object requestConfig) {
            try {
                return new {
                    ErrorMessage = SomeLogicMethod(requestConfig)
                };
            } catch (System.Exception ex) {
                return new {
                    ErrorMessage = ex.Message
                };
            }
        }
 
        public object SomeLogicMethod(object requestConfig) {
            CheckErrors();
            // Some logic
            return "response";
        }

 

Нужно вручную обработать данное исключение.
В веб-сервисе try..catch, который ловит исключение, и сервис возвращает объект, где есть сообщение ошибки.
На клиенте уже обработать, что если веб-сервис вернул сообщение ошибки, то показать его в модальном окне.

Владислав Литвинчук, 
У меня, есть некий пулл сообщений о проваленной валидации 

        private void CheckErrors()
        {
            if (_errorsPool.Count == 0)
                return;
 
            var sb = new StringBuilder();
            _errorsPool.ForEach(x => sb.AppendLine(x));
 
            throw new Exception(sb.ToString());
        }

Сервис вызываю с помощью ServiceHelper. Response с ошибкой содержит в себе много лишней информации, в т.ч. стек вызовов. Тут у меня загвоздка, как передать конкретные сообщения.

Илья Белов,

Примерно так:

[OperationContract]
        [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json,
        ResponseFormat = WebMessageFormat.Json)]
        public object SomeServiceMethod(object requestConfig) {
            try {
                return new {
                    ErrorMessage = SomeLogicMethod(requestConfig)
                };
            } catch (System.Exception ex) {
                return new {
                    ErrorMessage = ex.Message
                };
            }
        }
 
        public object SomeLogicMethod(object requestConfig) {
            CheckErrors();
            // Some logic
            return "response";
        }

 

Показать все комментарии