Имя: Пароль:
1C
1С v8
Передача данных по Web-сервису в транзакции
0 user925
 
09.12.13
12:47
Добрый день.
Есть опубликованный web-сервис и клиенты, которые к нему подключаются через Интернет:

Клинетская конфигурация:

Таймаут = 5;
Попытка
    GetCardInfo = Новый WSПрокси(WSОпределение, "http://10.1.10.70/GetCardInfo";, "GetCardInfo", "GetCardInfoSoap", Таймаут);
    Сериализатор = Новый СериализаторXDTO(GetCardInfo.ФабрикаXDTO);
    Клиент = Сериализатор.ЗаписатьXDTO(Карта);
    Данные = GetCardInfo.BonusCredit(Клиент, Параметр1, Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7, Параметр8);
Исключение
КонецПопытки;

Серверная конфигурация:

Функция BonusCredit(Клиент, Параметр1, Параметр2, Параметр3, Параметр4, Параметр5, Параметр6, Параметр7, Параметр8);

    // Операции записи в базу данных.
    Возврат РезультатОперацииЗаписи

КонецФункции


При плохом инете "Возврат РезультатОперацииЗаписи" может не произойти, и клиент не получит ответ о том, что запись в БД выполнена успешно. Как обработать ситуацию неудачной отправки информации через команду "Возврат РезультатОперацииЗаписи"?

спасибо.
1 dj_serega
 
09.12.13
12:50
А что возвращается? неопределено?
2 user925
 
09.12.13
12:59
На клиент возвращается Структура при успешном вызове или исключение (Couldn't connect to server: Ошибка работы с Интернет)

Серверная конфигурация:
Функция BonusCredit(....)
    ...
    Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
    ОбъектXDTO = Сериализатор.ЗаписатьXDTO(Структура);
    Возврат ОбъектXDTO;
КонецФункции
3 Serginio1
 
09.12.13
13:07
Ну 1с не поддерживает WS-ReliableMessaging
Лучше каждому сообщению присваивать свой ГУИд. А на в 1С создать регистр сведений записывающий в него этот ГУИД. Перед записью проверять ГУИД на наличие
4 user925
 
09.12.13
13:22
(3) Можно скинуть источник информации по поводу WS-ReliableMessaging ?

По ГУИДу, я правильно понимаю вас, что сервер не должен принимать повторное сообщение от клиента, чтобы не дублировать запись в БД?
5 Serginio1
 
09.12.13
13:30
6 user925
 
09.12.13
13:49
(5) Правильно ли я понял, что сам ws-протокол может поддерживать WS-ReliableMessaging, но в 1С надежные сообщения не реализованы?
7 Serginio1
 
09.12.13
14:01
(6) Да. В 1с даже поддерки  <s:Header>
и Cookie нет
v8: soap:Header
v8: Использование SOAP из TurboSMS
8 user925
 
09.12.13
14:14
Функция BonusCredit(....)
    ...
    Нельзя ли здесь получить обработчик соединения и отправить сообщение клиенту с обработкой ошибки отправки?

    Хотелось бы что-то вроде этого:

    Попытка
        Возврат ОбъектXDTO;
    Исключение
        // обработка ошибка, отмена транзакции
    КонецИсключения

КонецФункции
9 Serginio1
 
09.12.13
14:20
10 Serginio1
 
09.12.13
14:23
11 user925
 
09.12.13
15:04
Похоже, то что надо, реализуется только сторонними библиотеками. Воспользуюсь (3).

Спасибо!
12 acsent
 
09.12.13
15:08
не пришло подтверждение считай что не выполнено. Повторное выполнение должно уметь находить ранее созданное
13 acsent
 
09.12.13
15:10
У СМС сервисов обычно есть методы для получения статуса
14 user925
 
09.12.13
16:20
Методика ясна, спасибо.