Имя: Пароль:
1C
 
Web сервисы (Параллельное выполнение)
, , ,
0 miklenew
 
02.10.15
11:46
Создал web сервис в 1с. Создал публикацию в апач.
Подключаюсь к web сервис, запускаю функцию веб сервиса. Выполняется минут 5.
Пока не прошли 5 минут пытаюсь подключиться снова к серверу апач.
Новый WSОпределения(Путь, Пользователь, Пароль)
Даже подключиться не даёт. Ждёт 5 минут, потом только даёт подключение.
То есть работа происходит в последовательном режиме.
Пробывал сделать две публикации в разные папки. Да так даёт возможность параллельно работать. Но это ж ерунда какая то. А если 10-20 пользователей. Они чё должны друг друга ждать?
Кто нибудь сталкивался с такой проблемой?
1 Cyberhawk
 
02.10.15
11:48
Так а ты под другим пользователем подключался во второй раз?
2 НеБорис Нуралиев
 
02.10.15
11:57
Модуль вебсервера в 1С 8 вроде однопоточный...
3 Fragster
 
гуру
02.10.15
12:00
для файловой базы так и будет
4 Fragster
 
гуру
02.10.15
12:04
ну и да - вебсервис, который выполняется 5 минут - это жестковато при синхронном выполнении.
Два варианта (по возмодности):
1. надо сделать вебсервис, который стартует фоновое и возвращает ИД фонового, и с другой стороны периодически спрашивать, как там через другой вебсервис. При выполнении забирает результат (например из временного хранилища или из данных сообщений фонового задания с нашим ИД).
2. надо сделать вебсервис, который стартует фоновое и возвращает ОК, фоновое задание в конце вызывает вебсервис базы, которая инициировала первый вызов и передает туда результаты..
5 miklenew
 
02.10.15
12:04
(1) Пробывал разными пользователями. Эффект тот же
(2) Какой модуль? это ж происходит на уровне апача.
(3) Да файловая. Но ведь если две публикации одной базы делать, появляется многопоточность.
6 Fragster
 
гуру
02.10.15
12:06
7 miklenew
 
02.10.15
12:06
(4) База файловая. Не запустиш фоновое задание. Просто странно было бы если например к сайту чтоб доступ иметь пользователи ждали бы друг друга. Т.е. у апача много поточность присутствует. Выходит 1С какой то кастыль вставила что много поточность перестала работать
8 Fragster
 
гуру
02.10.15
12:07
(7) в файловой базе с версии 8.3.3 фоновые работают
9 Fragster
 
гуру
02.10.15
12:07
10 miklenew
 
02.10.15
12:10
(9) Спасибо за ссылку. Читаю.
У нас древняя УТ. Переделывать на 8.3 врятли будем
11 НеБорис Нуралиев
 
02.10.15
12:14
(5) К апачу 1С подключается через модуль расширения. Вот он и есть однопоточный (если работаешь в файловом варианте).
12 НеБорис Нуралиев
 
02.10.15
12:14
(3) Да, точно. В клиент-серверном возможна параллельная работа.
13 oleg_km
 
09.10.15
09:45
(12) А откуда дровишки? Я сделал тестовый HTTP-сервер, вроде модуль веб-расширения тот-же. База клиент-серверная. В обработке запроса установил задержку на 20 сек. Запустил из браузера несколько запросов. Каждый последующий начинает обрабатываться только после окончания предыдущего
14 Asmody
 
09.10.15
09:55
запусти N инстансов апачей на разных портах, а перед ними поставь nginx с upstream
15 oleg_km
 
09.10.15
09:58
(14) А, вот оно что. Ну тогда ладно. А в букваре где-нибудь про это написано?
16 pumbaEO
 
09.10.15
10:09
(14) haproxy наше все
17 Asmody
 
09.10.15
10:14
(16) Суть решения не меняется. Остается только как-то определить идентификатор сессии.
18 pumbaEO
 
09.10.15
10:17
(17) в haproxy это есть, запоминание сессий
19 Fragster
 
гуру
09.10.15
10:19
(13) без кода не сказать. вообще они параллельно работают.
20 oleg_km
 
09.10.15
10:26
(19)

    Начало = ТекущаяДата();
    
//    БиблАП.ПолучитьNET().Приостановить(20000);
    Пока ТекущаяДата() < Начало + 20 Цикл
        БиблАП.ПолучитьNET().Приостановить(500);
    КонецЦикла;
    
    рез = "
    |<!DOCTYPE HTML>
    |<html>
    |    <head>
    |        <meta charset=""utf-8"">
    |        <title>Проверка</title>
    |    </head>
    |    <body>
    |        Проверка<br>
    |       %1<br>
    |        %2
    |    </body>
    |</html>";
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки(СтрШаблон(рез, Начало, ТекущаяДата()));
    Возврат Ответ;
21 Fragster
 
гуру
09.10.15
10:30
(20) может компонента блокирующая? попробуй ЗапуститьПриложение("ping 127.0.0.1").
22 MaxisUssr
 
09.10.15
10:33
(0)
В клиент-серверной - выполняется параллельно. По крайней мере на нашем сервере, если тестировать с помощью например SoapUI (пулять 500 запросов в секунду)
23 MaxisUssr
 
09.10.15
10:33
(22)
Под разными потоками
24 oleg_km
 
09.10.15
10:53
(21) Ну она действительно блокирующая, я же блокирую поток.

Но я переделал

Функция ОсновнойЛюбой(Запрос)
    Начало = ТекущаяДата();
    
//    БиблАП.ПолучитьNET().Приостановить(20000);
    //Пока ТекущаяДата() < Начало + 20 Цикл
    //    БиблАП.ПолучитьNET().Приостановить(500);
    //КонецЦикла;
    
    Пока ТекущаяДата() < Начало + 20 Цикл
        ЗапуститьПриложение("ping 192.168.10.8 -w 20000");
    КонецЦикла;
    
    рез = "
    |<!DOCTYPE HTML>
    |<html>
    |    <head>
    |        <meta charset=""utf-8"">
    |        <title>Проверка</title>
    |    </head>
    |    <body>
    |        Проверка<br>
    |       %1<br>
    |        %2
    |    </body>
    |</html>";
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки(СтрШаблон(рез, Начало, ТекущаяДата()));
    Возврат Ответ;
КонецФункции


Запускаю два браузера с интервалом 5 сек:

Проверка
09.10.2015 10:51:10
09.10.2015 10:51:30

Проверка
09.10.2015 10:51:32
09.10.2015 10:51:52
25 Fragster
 
гуру
09.10.15
10:56
ЗапуститьПриложение("...", , Истина);


Ну и да - у тебя точно клиент-серверная база?
26 oleg_km
 
09.10.15
11:03
(25) У меня других нет, платформа 1С:Предприятие 8.3 (8.3.6.2332)

Так а там все равно цикл, который имитирует непрерывную работу 1С 20 сек
27 Serginio1
 
09.10.15
11:10
Попробуй в default.vrd поиграться с размером пула
<pool  size="50" maxAge="10" attempts="2"/>



http://yellow-erp.com/page/guides/adm/service-files-description-and-location/#DEFAULTVRD
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн