Имя: Пароль:
1C
1С v8
WEB service Etran
, , ,
0 yyyuuu
 
05.02.20
08:01
Здравствуйте друзья. Столкнулся с проблемой. Уже что только не делал но не получается ее решить.


ТекстЗапроса =
    ЗапросХМЛ;
   ТаймаутСоединения = 600000;
    ТаймаутОперации = ТаймаутСоединения;
    МестоположениеWSDL = АдресПодключения + "?wsdl";
    Определения = Новый WSОпределения(МестоположениеWSDL, Логин, Пароль, , ТаймаутСоединения);

    Сервис = Определения.Сервисы.Получить(0);
    Точка = Сервис.ТочкиПодключения.Получить(0);
    ПодключениеКЭтрану = Новый WSПрокси(Определения, Сервис.URIПространстваИмен, Сервис.Имя, Точка.Имя, , ТаймаутОперации);
    
    ПодключениеКЭтрану.Пользователь = Логин;  
    ПодключениеКЭтрану.Пароль = Пароль;      

    ТекстXML = ТекстЗапроса;
    ПодключениеКЭтрану.GetBlock(Логин, Пароль, ТекстXML);
    ТекстОтвета = ТекстXML;

Ответ не получаю, похоже по таймауту отключает. Делал через SOUPUI - так же ошибку выдавал error getting response java.net.sockettimeoutexception read timed out
Увеличил время таймаута 60000000 все, стало работать. Подскажите пожалуйста все ли Я верно делаю при подключении в 1с?
Потому что в 1с не работает.
1 бегинер
 
05.02.20
08:10
сделай вывод отметок времени до и после получения ответа, и получишь среднее время ответа сервера ЭТРАНА АСУ-АСУ, соотв. поймешь какой таймаут делать с запасом на случай отвала сервера РЖД
2 yyyuuu
 
05.02.20
08:14
(1) 60000000 - тут больше 10 минут) Я уже сделал с запасом солидным
3 yyyuuu
 
05.02.20
08:18
Soket TimeOut в SOUPUI увеличил и нормально. Значит дело в таймауте. Вот чего мождет не хватаеть? Друзья давайте разеберимся
4 бегинер
 
05.02.20
08:18
(3) а что у тебя в 1с конкретно не работает? в каком месте ругается и как?
5 yyyuuu
 
05.02.20
08:21
(4) конкретно в 1с и пишет и 1с Интерпритирует ошибку так

{ОбщийМодуль.Этран.Модуль(156)}: Ошибка при вызове метода контекста (GetBlock)
по причине:

по причине:
При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса:  {<noindex><a class="is-fancybox" href="/redirect.php?url=aHR0cDovL3RlbXB1cmkub3JnLw==" target="_blank" rel="nofollow">http://tempuri.org/}:IEtranSysservice:GetBlock()
по причине:
При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка работы с Интернет:   Failure when receiving data from the peer
по причине:
Ошибка работы с Интернет:   Failure when receiving data from the peer

Ругается ПодключениеКЭтрану.GetBlock(Логин, Пароль, ТекстXML) - Тут.
3 минуты думает и через 3 отваливается 3 минуты и 21 секунду
6 yyyuuu
 
05.02.20
08:21
Провайдер не причем, соапУИ то работает
7 yyyuuu
 
05.02.20
08:29
Пробовал все что смог понять, ну ничего не работает. Ну хоть ты взорвись. Вторую неделю сижу и понять вообще не могу ну что еще не хватает. Может кто подключался к какому нибудь вэб сервису. Хотябы в аналогичным примером можно было бы поработать
8 yyyuuu
 
05.02.20
08:34
Вот еще один момент занимательный. 1800 вагон которые Я загружаю проходят. А 2228 Нет.
Была КОнечно мысль разделить на 2 запроса и загружать, но что делать когда вагонов будет 40000? На 40 запросов делить.
9 бегинер
 
05.02.20
08:38
у тебя есть от ржд адрес с описанием: АдресПодключения + "?wsdl"
зайди в конфигуратор, в ветку "общее" и создай там WS ссылку  и при создании подсунь ссылку что тебе ржд дало вида http://zzzzz?wsdl

будет ws ссылка в итоге, которую в коде можно юзать:
например:
WSСсылка2 - Это имя созданной ws ссылки

пример:
прокси=wsссылки.WSСсылка2.СоздатьWSПрокси("http://www.site.ru/","OtherRequests","OtherRequestsSoap";);
баланс=Прокси.GetUserBalance(RLOG_UserID);
10 yyyuuu
 
05.02.20
08:42
Попробую)
11 yyyuuu
 
05.02.20
08:44
Хотя ему есть разница как подключаться в WSL?
Определения = Новый WSОпределения(МестоположениеWSDL, Логин, Пароль, , ТаймаутСоединения);
Это не тоже самое?
12 yyyuuu
 
05.02.20
08:46
Через прокси так же делал. только ссылку сам ему задавал

URLПространстваИменСервиса = "http://tempuri.org/";;
        ИмяПользователя = Константы.ETRAN_user.Получить();
        Пароль = Константы.ETRAN_upass.Получить();
        МестоположениеWSDL = Константы.МестоположениеWSDL.Получить();
        ИмяСервиса = "IEtranSysservice";
        ИмяТочкиПодключения = "IEtranSysPort";

        SSL = Новый ЗащищенноеСоединениеOpenSSL();
        WSОпределение = Новый WSОпределения(МестоположениеWSDL,,,,ТаймаутСоединения,SSL);
        WSПрокси = Новый WSПрокси(WSОпределение, URLПространстваИменСервиса, ИмяСервиса, ИмяТочкиПодключения,,ТаймаутСоединения,SSL);
        WSПрокси.Пользователь = ИмяПользователя;
        WSПрокси.Пароль = Пароль;
        
        СвояФабрикаXDTO = WSОпределение.ФабрикаXDTO;
        Попытка
        Результат = WSПрокси.GetBlock(ИмяПользователя, Пароль,ТекстЗапроса);
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
13 бегинер
 
05.02.20
08:48
прокси=wsссылки.WSСсылка2.СоздатьWSПрокси("http://www.site.ru/","OtherRequests","OtherRequestsSoap";;);

смотришь созданную ws ссылку в 1с и берешь из нее в код:

"http://www.site.ru/"; - это имя пакета ( смотришь: WSссылка>Модель данных>Пакет(в скобках имя пакета указано)
http://www.site.ru/ в скобках это указано в моем случает

"OtherRequests" - имя web сервиса (смотришь: WSссылка>Web-сервисы>здесь указано на третем уровне иерархии вс ссылки)

OtherRequests - WSссылка>Web-сервисы>!!!OtherRequests!!!


"OtherRequestsSoap" аналогично

OtherRequestsSoap - WSссылка>Web-сервисы>OtherRequests>!!!OtherRequestsSoap!!!
14 бегинер
 
05.02.20
08:50
когда сделаешь через обьект 1с wsссылка - 1с сама подтянет все

а так может вкоде ты всякие типы пространства имен че нить накосячил

попробуй через объект wsссылка
15 бегинер
 
05.02.20
08:54
а потом одну строку:
прокси=wsссылки.WSСсылка2.СоздатьWSПрокси("http://www.site.ru/","OtherRequests","OtherRequestsSoap";;);

если прокси создается без ошибок - значит коннект есть

далее уже играешься с:

Результат = прокси.GetBlock(ИмяПользователя, Пароль,ТекстЗапроса);
16 yyyuuu
 
05.02.20
08:57
ДА коннект то есть, он же Мне позволяет загружать информацию до 1900 вагонов). А у Меня их 2228 а дальше будет 40000
17 бегинер
 
05.02.20
09:00
ну значит все робит :), а если упираешься в лимиты - то обратиться уже к ребятишкам с РЖД, крупняков они в попу целуют обычно :)
18 yyyuuu
 
05.02.20
09:03
Да Я им уже третью неделю обьясняю то что вот такая проблема, они говорят вали к провайдеру он виноват. Я делаю через СОАПУИ не работает показывают ошибку, увеличиваю таймаут делаю работает. Не говорю об этом. Пробую увеличить таймаут в 1с вроде бы, увеличь ты его и проблема решена. А хрен, ничего никакого движения.
Делать на запросы Я бы сделал, если бы кто нибудь сказал как 2 хмл ответа объеденить, одинаковых. Я примерно понимаю, но писанины много. Либо делить запросы, но Я не очень хочу делить. Потому что сегодня 2229 их а завтра 2 миллиона
19 Сияющий в темноте
 
05.02.20
09:10
ошибка получения данных с потока-это таймаут tcp на получение данных,то есть на операцию Read с Socket,а это,насколько я помню,в 1с не настраивается.
если противоположная сторона шлет данные как черепаха,то размер данных берут из заголовка и читают в неблокирующем режиме все,что пришло,пока не придет все,что было передано - в этом случае таймаут сокета роли не играет.
20 бегинер
 
05.02.20
09:14
а что за инфо получаешь - дислокацию?
если от РЖД - то они поставщики, хоть и интелекс разраб (по их заказу)
21 yyyuuu
 
05.02.20
09:21
(20) Получаю дислокацию, справка 14
22 yyyuuu
 
05.02.20
09:22
(19) Я не совсем уловил смысл, но Я так понимаю сокет в 1с не настроить и все пропало?
23 бегинер
 
05.02.20
09:28
(21) мы получаем не от РЖД дислокацию, берем по rest api

цена 3.5 руб за 1 вагон (сутки слежения, каждые 30 мин обновления)

интересно, у вас дешевле или дороже выходит?
24 yyyuuu
 
05.02.20
09:47
Дешевле вроде потому что они нихрена не стоят))
25 yyyuuu
 
05.02.20
09:47
По этому и надо делать бесплатную)
26 yyyuuu
 
05.02.20
10:21
(23)
А ты по пакетам XDTO работаешь или ком создаешь? Схемы как у ржд или свои у них?
27 бегинер
 
05.02.20
10:31
(26) мы берем у питерской "СТМ"

там и через soap можно (xml) - через XDTO WS ссылки, формат  ответа (набор полей) у них свой
и через rest api - там чисто post get запросы (в 1с через HTTPСоединение) и в ответ json прилетает
28 yyyuuu
 
05.02.20
10:54
(27) а они у кого берут?) У РЖД?)
29 бегинер
 
05.02.20
11:02
(28) да :)

сейчас в личном кабинете РЖД можно бесплатно смотреть свои отправки дислокацию - но только свои, другой вагон не увидишь. но api работы с личным кабинетом нет, ручками смотреть 100 и более вагоном - мало приятное удовольствие

т.е. у РЖД есть инфа - но удобство работы с ней отсутствует, надо подрубать vipnet и т.д. - поэтому и было много разных поставщиков дислокации, но сейчас их мало осталось - всех порезали неофициальных

соотв. мы берем у СТМ - там любой вагон по номеру можно пробить (даже если не твоя отправка и не в твой адрес)
30 unregistered
 
05.02.20
11:08
(23) >> цена 3.5 руб за 1 вагон (сутки слежения, каждые 30 мин обновления).

40000 вагонов * 3.5₽ * 365суток = 51 100 000₽ в год. Не слишком ли дороговато за такой сервис?
31 бегинер
 
05.02.20
11:24
(30) нет

у нас грубо одна отправка занимает макс 1 месяц, грубо 150 руб за слежение за один вагон заплатим
прибыль с отправки одного вагона: 100 тыс и более
32 yyyuuu
 
07.02.20
07:37
Кароче сделал, все Мне кажется не правильно но работает
33 yyyuuu
 
07.02.20
08:08
ФабрикаXDTO.Тип("http://service.siw.pktbcki.rzd/";, "reference14ASUResponse").Свойства.Получить("reference14ASU").Тип.Свойства.Получить("row").Тип;
Уже так сделал, все ровно говорит что:
роверка дополнительного свойства:
    форма: Элемент
    имя: row: Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://service.siw.pktbcki.rzd/}reference14ASU
34 yyyuuu
 
07.02.20
08:09
Ой это не та тема)
35 yyyuuu
 
19.02.20
07:08
Разделил на 2 запроса, иначе просто никак.
36 yyyuuu
 
19.02.20
10:14
Тут скорее всего дело в 1с именно а не в чем то другом. Потому что спокойно все проходит череp SOUP UI.
Там тоже не работало, Но Я увеличил тайм аут
37 yyyuuu
 
20.02.20
07:40
Может кто как учил 1с пропиховить такой объем но у Меня отваливает по тайауту