Имя: Пароль:
1C
 
Как передать текст ошибки из веб-сервиса?
, ,
0 vi0
 
25.09.16
06:22
Поделитесь, кто как передает текст ошибки из веб-сервсиса в случае различных своих проверок данных?
В случае с внешним соединением есть удобная типовая функция СообщитьОбОшибке, правда текст выводится пользователю не очень читабельный, зато минимум усилий со стороны разработчика.
А как в случае с вызовами веб-сервсиса?

Процедура СообщитьОбОшибке(ТекстСообщения, Отказ = Ложь, Заголовок = "", Статус = Неопределено) Экспорт
    #Если ВнешнееСоединение Тогда
    ВызватьИсключение (ТекстСообщения);
    #Иначе
...
1 Armando
 
25.09.16
08:41
ВызватьИсключение для вебсервиса тоже работает
2 vi0
 
25.09.16
09:41
(1) конечно работает, но здесь ты не сможешь использовать директиву для внешнего соединения, как в примере (0), поэтому и спрашиваю, какой есть опыт
3 TreeDogNight
 
25.09.16
09:46
Вы из 1й базы вызываете метод Веб-сервиса 2й базы, и в случае ошибки хотите вывести сообщение в 1й базе или во 2й?
4 vi0
 
25.09.16
09:47
(3) в вызывающей базе, т.е. в 1й
5 TreeDogNight
 
25.09.16
10:52
Что вам мешает получить из метода текст ошибки (в случае её возникновения) и сообщить этот текст в 1й базе?
6 Mauser
 
25.09.16
10:55
(5) Он хочет минимум усилий со стороны разработчика.
7 vi0
 
25.09.16
11:26
(5) так можно
интересен опыт других
8 Mauser
 
25.09.16
11:35
(7) Можно по разному. В каждом конкретном случае - свои требования. Надо ли тебе отслеживать отдельно таймауты и 500 - iis поломан, 500 - ховнокодер поделил на ноль и 200 - у тебя кривой склад, но можешь продолжать и т.п. Как со стороны вызывающего, так и со стороны сервера.
У тебя же в (0) подход однозначен - есть удобная функция, я не осилил подобную для веб-сервиса, а расскажите мне.
9 vi0
 
25.09.16
12:01
(8) не нужно так нервничать, уважаемый
вопрос в (0) у меня простой:
> Поделитесь, кто как передает текст ошибки из веб-сервсиса
10 TreeDogNight
 
25.09.16
13:00
(9) В методах Веб-сервисов я обычно возвращаю сереализованную JSON-структуру. Если во время исполнения алгоритма метода возникает какая-то ошибка, я возвращаю структуру с ключем "Error" и текстом ошибки, и уже на стороне вызывающей базы проверяю принятую структуру на содержание данного ключа. Если он есть, то просто сообщаю значение этого ключа.
11 vi0
 
25.09.16
13:26
(10) И результат веб-сервисов всегда структура?
12 TreeDogNight
 
25.09.16
13:44
(11) Да.
13 vi0
 
26.09.16
07:28
а есть аналог #Если ВнешнееСоединение для веб-сервиса?
в курсе кто?
14 Mauser
 
26.09.16
07:49
(13) Конечно в курсе - в СП описаны все варианты.
15 vi0
 
26.09.16
10:06
(14) что ты не угомонишься никак
16 Остап Сулейманович
 
26.09.16
10:10
(13) А зачем это? Модуль ВЕБ-сервиса и так выполняется только в веб-сервисе. Или имеется ввиду вызов (например) общего модуля от имени ВЕБ-сервиса? Так передай ему параметром фишку, что оно вызвано из ВЕБ-сервиса. Или о чем терки?
17 vi0
 
26.09.16
10:14
(16) интересно, можно ли идентифицировать веб-сервис штатными средствами
18 Остап Сулейманович
 
26.09.16
10:18
(17) Ф-у-у-ух. Ну прям сразу все стало понятно.
"идентифицировать веб-сервис штатными средствами"
Где?
1. На стороне клиента (который вызвал операцию ВЕБ-сервиса)
2. На стороне сервиса в общем (например) модуле.
3. В модуле самого ВЕБ-сервиса 0_0
19 vi0
 
26.09.16
10:21
(18) ну если читать токль (17) то правда понять трудно
выше, например в (0) или (13) все написал
20 Жан Пердежон
 
26.09.16
10:22
(18) забей, чел за 11 лет на мисте так и не научился вопросы формулировать; уже все рассказали, но он все равно ждет какого-то чуда
21 Остап Сулейманович
 
26.09.16
10:27
(19) Если читать (0) - то ни о какой "идентификации" ВЕБ-сервиса речь не идет.
Чем не устраивает вариант в (10)?
Еще есть классика жанра - возвращаемая из ВЕБ-сервиса переменная с текстом ошибки. Если она пустая - ошибок нет и делать ничего не нужно. Если метод ВЕБ-сервиса заполнил эту переменную - на принимающей стороне
1. ВызватьИсключение с текстом ошибки принятой от ВЕБ-Сервиса.
2. ПоказатьПредупреждение с теми же исходными
3. ...
22 Остап Сулейманович
 
26.09.16
10:27
+ (21) Зачем дополнительно идентифицировать ВЕБ-сервис я понять затрудняюсь. Или вы не уверены в том, кого вызывали?
23 vi0
 
26.09.16
10:36
(22) > Зачем дополнительно идентифицировать ВЕБ-сервис я понять затрудняюсь
Например, операция веб-сервиса использует уже существующие процедуры содержащие в себе проверки и вызывающие процедуру СообщитьОбОшибке. Как я написал в (0) в случае вызова этих процедур по внешнему соединению вызывается исключение, т.к. есть идентификация контекста внешнего соединения.
24 Жан Пердежон
 
26.09.16
10:58
(22) под "идентификацией" он подразумевает что-то типа следующего на стороне сервера:

ЭтоВебСервис = Ложь;

Для каждого Соединение из ПолучитьСоединенияИнформационнойБазы() Цикл
    Если Соединение.НомерСоединения = НомерСоединенияИнформационнойБазы() Тогда
        ЭтоВебСервис  = Соединение.ИмяПриложения ="WSConnection";
    КонецЕсли;
КонецЦикла;
25 vi0
 
26.09.16
11:16
неплохо
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший