Имя: Пароль:
1C
1С v8
Как прервать выполнение через заданный интервал времени?
0 Septera
 
05.11.11
13:25
Есть код:

Соединение = Новый COMОбъект("ADODB.Connection","localhost");
Соединение.Open("..."); //вот здесь иногда зависает

как можно прервать процедуру через скажем 10 секунд?
1 ДенисЧ
 
05.11.11
13:25
таймаут выставить
2 Septera
 
05.11.11
13:34
(1) хорошее предложение, осталось узнать как?))
3 ДенисЧ
 
05.11.11
13:36
А почитать доку по ADO религия не позволяет??
4 Septera
 
05.11.11
13:44
(4) весьма тонкий намек... и на этом спасибо
5 shuhard
 
05.11.11
13:45
(3) +1
и "localhost" я бы убрал
ибо "Если параметр опущен, то создается на данном компьютере."
6 Septera
 
05.11.11
16:18
Соединение.ConnectionTimeout = 5;
не помогло
7 Septera
 
05.11.11
17:27
апну разок
8 Jaap Vduul
 
05.11.11
18:18
9 Septera
 
05.11.11
18:57
(8) Дословно: Удостоверьтесь что провайдер и источник данных, в который Вы пишете, поддерживают функциональность CommandTimeout.
Значит не поддерживает мой драйвер, по умолчанию стоит 15 секунд, но толку ноль. Какой может быть обход?
10 aleks-id
 
05.11.11
21:55
(9) использовать другой провайдер? и вообще. что за jопское создание конекшена?
11 vde69
 
05.11.11
22:01
во первых можно ADO настроить по DCOM и смотреть там таймауты
во вторых можно перед созданием соединения просканировать процессы и убить по тайму процесс (а переменные обнулить)
12 Septera
 
05.11.11
22:39
(10) чем же плох этот конекшен???
(11) ппц... я почти был готов это реализовать, даже наброски уже были (кстати насчет тайма не знаю, но при помощи telnet все решается довольно просто), Но в итоге все решилось намного проще, как оказалось в параметрах реестра ранее выставлялась задержка, после ее отключения все заработало
13 vde69
 
05.11.11
22:52
(12) есть еще один способ, дело в том что таймаут устанавливается как в объекте connect так и в объекте open на память я не помню что имеет приоритет, но если таймаут установить в обоих объектах - то все заработает
14 МишельЛагранж
 
05.11.11
22:53
(12) вы бы подробнее описали - а то "все просто: 1с заработала нормально, как только реестр поправил и загрузил 1 раз сайт Майкрософта" ))
15 Septera
 
05.11.11
23:08
(13) не факт, я ведь в (9) написал дословный перевод документации по этому поводу и на факте все подтверждается, по умолчанию стоит 15 секунд, я меняю на 5 секунд, тут же проверяю установилось новое значение или нет, после вызываю open и иду спать))
(14) МС тут не причем, когда-то выставлялись настройки для тунелирования, а там чувствительность к задержкам большая, поэтому увеличивали TcpMaxDataRetransmissions, после удаления параметра, а также за компанию удалил TcpTimedWaitDelay, все встало на свои места, теперь open замерзает максимум на 20 секунд и вылетает с ошибкой, за что ему и спасибо))
16 МишельЛагранж
 
05.11.11
23:14
(15) т.е. проблема в настройках сети? тогда и другие сетевые приложения - тот RDP, - будут работать с разрывами...
а как понять "теперь open замерзает максимум на 20 секунд и вылетает с ошибкой, за что ему и спасибо"? т.е. вы добивались ошибки?
17 Septera
 
06.11.11
01:20
(16) причем здесь rdp, rdp упал и мы это увидели если что, а COM-соединение если упадет то в лучшем случае ты это увидишь при следующем open, а следующий open в моем случае замерзал надолго, тогда как теперь проходит 20 секунд и я могу обработать Исключения со всеми вытекающими
18 МишельЛагранж
 
06.11.11
01:25
т.е. у вас сеть как-бы висла что ли??
интересные у вас настройки были ))
19 Septera
 
06.11.11
01:28
(18) именно "подвисала" на этом сервере, это было сделано в свою очередь когда-то для стабильности тунельных соединений, но в данный момент такая необходимость отпала
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс