Имя: Пароль:
1C
1С v8
Http-сервис обрабатывает 30 запросов и зависает ☑
0 ГдеСобака Зарыта
 
22.02.17
✎
17:12
8.3.9.1850, файловая база, iis 8.5.9600
Http-сервис принимает post-запросы. 30 запросов обрабатывает нормально, на 31-м зависает. Коннект http-сервиса висит в активных пользователях, обработчик http-метода не срабатывает, никаких ответов сервис не шлет. Количество обрабатываемых запросов от сеанса не зависит. Пробовал отправить 15 запросов в одном сеансе, ждал его закрытия и отправлял следующие запросы во втором сеансе. Зависает на 16-м.
Рестарт iis, сброс коннекта http-сервиса к базе и тебе снова доступно 30 запросов.
http-сервис в расширении конфигурации.
ПовторноеИспользованиеСеансов - ИспользоватьАвтоматически
default.vrd по умолчанию
<service name="CRMIntegration"
                rootUrl="CRMIntegration"
                enable="true"
                reuseSessions="autouse"
                sessionMaxAge="20"
                poolSize="10"
                poolTimeout="5"/>
Где собака зарыта? Поскажите
1 АнтонБ
 
22.02.17
✎
17:23
1c, не?
2 ГдеСобака Зарыта
 
22.02.17
✎
17:27
В логе iis:
Рабочий процесс "1652", обслуживающий пул приложений "DefaultAppPool", не смог остановить канал прослушивателя для протокола "http" в отведенный интервал времени.  Поле данных содержит номер ошибки.
3 Cyberhawk
 
22.02.17
✎
17:54
Подними диапазон портов у службы агента, видать стандартных 32 не хватает
4 ГдеСобака Зарыта
 
22.02.17
✎
18:01
(3) А где это? можно подробнее? Для чайника
5 Cyberhawk
 
22.02.17
✎
18:04
(4) В строке запуска процесса (службы) - в реестре Винды - увеличиваешь 1560:1591 до, например, 1560:1691 и проверяешь, что там у тебя с 31-м ХТТП-запросом будет. Не думаю, что это поможет, конечно, ведь должен быть пул для ХТТП-соединений, но всякое бывает
6 ГдеСобака Зарыта
 
22.02.17
✎
18:37
(5) это ты про агент сервера 1С? У меня база файловая же.
7 Cyberhawk
 
25.02.17
✎
17:17
(6) Да, про файловую. Самое время проверить на серверной базе. Ну или с пулом поиграться в файлах конфигурации веб-сервера (ИТС в помощь)
8 Cyberhawk
 
25.02.17
✎
17:18
+(7) "Да, про файловую" = "Да, про серверную"
9 ELEA26
 
26.02.17
✎
00:15
Http сервис оберни в попытка исключение, посмотри, может в процедуре где "залипает"...?
10 ГдеСобака Зарыта
 
27.02.17
✎
11:59
В настройках пула приложений iis поставил перезапуск после выполнения 30-ти запросов. Вроде полет нормальный. 30 запросов, новый коннект к 1С и погнали дальше. Без шашечек, но едет.
Пробовал на 8.3.9.2170, переставлять iis - не помогало.
(9) Нет, в процедуре не залипает. Создается коннект и остается висеть. Обработчик сервиса на исполнение не запускается.
11 ГдеСобака Зарыта
 
01.03.17
✎
15:31
Рано радовался, проблема осталась. Зависает оказывается на записи в БД.
Итак, Http сервис принимает пост-запросы и пишет данные в БД. На 332-м по счету вызове метода Записать(), не важно в каком по счету запросе и каком сеансе, 1С намертво зависает. Пробовал записывать документы и записи в РС. Во всех случаях зависает на 332-ом вызове Записать(). В исключение не вываливается, остановки по ошибке нет. При этом если после 330-ти итераций записи перезапустить пул приложений iis, то можно выполнить еще 331 запись.
Выгрузить/загрузить, ЧекДБ, ТиИ делал.
Вот код обработкчика сервиса:
Функция ШаблонURL1Example(Запрос)
    СтрокаОтвет = "Успех!";    
    Для Сч = 1 по 300 Цикл
        Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
        Запись.Период = Дата(2017, 1,1);
        Запись.Валюта = Константы.ВалютаРегламентированногоУчета.Получить();
        Запись.Курс = 1;
        Запись.Кратность = 1;
        Попытка
            Запись.Записать();
        Исключение
            СтрокаОтвет = "Запись не удалась. Попытка № "+Сч+". "+ОписаниеОшибки();
            Прервать;            
        КонецПопытки;                
    КонецЦикла;    
    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки(СтрокаОтвет);
    Возврат Ответ;
КонецФункции
12 ГдеСобака Зарыта
 
01.03.17
✎
15:34
Пробовал на другой машине, ситуация похожая, только итераций записи доступно чуть больше, но потом даже рестарт iis не спасает. Только перезагрузка компа.
Что за триал версия такая?
13 Cyberhawk
 
01.03.17
✎
15:34
(11) Через другой веб-сервер попробуй (ИИС / Апач)
14 ГдеСобака Зарыта
 
01.03.17
✎
15:45
На Вин 7 iis 7.5 таже фигня.
15 ELEA26
 
02.03.17
✎
17:08
(14) Все в транзакции делай. А то в таком адском цикле 2 запроса за запись дерутся. А с транзакцией (весь цикл) - по таймауту выпадать будет.
И попытка/исключение лучше так:
Функция ШаблонURL1Example(Запрос)
Попытка
    СтрокаОтвет = "Успех!";
    СчСервиса = 0;    
    Для Сч = 1 по 300 Цикл
    СчСервиса = Сч;
        Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
        Запись.Период = Дата(2017, 1,1);
        Запись.Валюта = Константы.ВалютаРегламентированногоУчета.Получить();
        Запись.Курс = 1;
        Запись.Кратность = 1;        
        Запись.Записать();
    КонецЦикла;    
    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.УстановитьТелоИзСтроки(СтрокаОтвет);
Исключение
    СтрокаОтвет = "Запись не удалась. Попытка № "+СчСервиса+". "+ОписаниеОшибки();
    Ответ = Новый HTTPСервисОтвет(500);
    Ответ.УстановитьТелоИзСтроки(СтрокаОтвет);
КонецПопытки;                
Возврат Ответ;
КонецФункции
16 ГдеСобака Зарыта
 
02.03.17
✎
17:28
Поднял на Апаче. Проблема ушла. тьфу-тьфу-тьфу.
Независимо от того, куда вы едете — это в гору и против ветра!