Имя: Пароль:
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
Поднял на Апаче. Проблема ушла. тьфу-тьфу-тьфу.