Форум: "Базы";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];
ВнизПостоянные обрывы связи. Найти похожие ветки
← →
DeadMeat © (2008-01-05 14:20) [0]Здравсте всем.
Хотел посоветоваться. Пишу проект. СУБД - MSSQL 2005. Компоненты доступа - ADO. Драйвер OLE DB.
Вообщем суть:
надо написать некий клиент для MSSQL 2005, задача которого каждые 10 (время не жесткое, а просто для примера) секунд проверять наличие некоторых данных, в некоторой таблице на сервере. Если они получены, то уже действовать дальше.
Дальше - это показать их пользователю и в соответствии с его решением, обновить одно или два поля в этой же строке (только что полученной) на сервере. Клиент висит себе в трее и ждет следующей порции данных. Как появились - высвечивается окно и далее.
Т.е. в кратце.
Каждые 10 сек. считываем новые строчки из таблицы и если надо обновляем одно или несколько определенных полей в ней и отсылаем назад.
Все.
В чем проблема. Клиентская часть стоит в одной точке города - сервер в другой. Связь через интернет (ADSL соединение 512/512).
Вот только связь эта очень не стабильная. Частые обрывы.
Хотелось бы проконсультироваться у великого разума, как быть в такой ситуации. Обрыв ведь может произойти в любой момент работы. Т.е. как во время UPDATE так и во время SELECT. После обрыва надо восстановить соединение.
Как лучше всего организовать этот процесс?
На данный момент, я навтыкал где только можно блоки
try
except
end;
Внутри try работа с базой (считывание или апдейт). В except закрытие соединения и восстановление его в следующий раз.
Вот тока не догадался запись в лог туда поставить. Это я поставил в Application.OnException. Пишет критические ошибки всякие. Правда возникают ситуации, когда соединение все же не восстанавливается. В это время в логе пусто. Т.е. последнее сообщение где-нить за два дня до этого момента. Осложняется процесс тем, что выявить эти ситуации очень проблемно.
Пытались эмулировать это дело в локалке. Выдергивали кабель в самые разные моменты. Все шикарно.
Как ставим клиенту... так работает несколько дней и все. А может и неделями работать.
В какойто момент связь перестает восстанавливаться.
Повторю вопрос.
Как лучше всего организовать работу в данной "огресивной" среде?
ЗЫ. RemoteDesktop и иже с ним не предлагать, т.к. клиент пользуется другими программами. Моя лишь маленькое окошко. Другими словами, нельзя весь экран занимать моей программой.
Разве что если можно настроить RemoteDesktop чисто на работу с одной этой программой в одном маленьком окне. Хотя наверно сумбурно.
Все осложняется тем, что за компьютером сидят "обезъяны" (пардон). Заставить их чтото сделать (даже перезапустить программу) проблемно.
← →
sniknik © (2008-01-05 14:56) [1]> В except закрытие соединения и восстановление его в следующий раз.
и очередной try except для обработки ошибок уже этого восстановления коннекта? или тут обработки нет совсем?
логику надо менять, вообще зачем нужно поддерживать постоянное соединение если оно требуется от случая к случаю?
имхо, лучше подключился, сделал что надо, и отключился. (и таймауты сделать побольше чем 10 сек,)
> Это я поставил в Application.OnException. Пишет критические ошибки всякие.
все что обработано, или нет, главное закрыть try except туда не попадает (если нет повторного "raise" в ексепте). т.е. лог нужно вести везде.
> когда соединение все же не восстанавливается. В это время в логе пусто.
т.е. ты его что в базу пишешь?... лог ошибок, тем более связанных непосредственно с базой, надо писать локально (чтобы вообще от сети не зависело, не только от коннекта к базе).
> Как ставим клиенту... так работает несколько дней и все. А может и неделями работать.
не похоже на проблему со связью, больше похоже что программа повисла напрочь (/вылетела), ищи глюки, лики, "причесывай код", и т.д. делай нормальный лог, без него не обойтись. а так "найди то не знаю что"...
> Пытались эмулировать это дело в локалке.
а аналогичное подключение как у клиента "(ADSL соединение 512/512)" не пытались организавать?
+
> за компьютером сидят "обезъяны" (пардон).
посадите такую же для поиска у себя.
← →
DeadMeat © (2008-01-05 15:17) [2]
> и очередной try except для обработки ошибок уже этого восстановления
> коннекта? или тут обработки нет совсем?
Нет. В except идет просто закрытие соединения. Открытие идет, когда наступают следующие 10 секунд.
Закрытие идет так:
try
dbConnection.Close;
except
// здесь уже добавил "писалку логов".
end;
> логику надо менять, вообще зачем нужно поддерживать постоянное
> соединение если оно требуется от случая к случаю?имхо, лучше
> подключился, сделал что надо, и отключился. (и таймауты
> сделать побольше чем 10 сек,)
Вот об этом была мысль. Но все же решил в начале спросить здесь.
> все что обработано, или нет, главное закрыть try except
> туда не попадает (если нет повторного "raise" в ексепте).
> т.е. лог нужно вести везде.
Уже сделал. Сижу и жду очередного прикола.
> т.е. ты его что в базу пишешь?... лог ошибок, тем более
> связанных непосредственно с базой, надо писать локально
> (чтобы вообще от сети не зависело, не только от коннекта
> к базе).
Конечно же нет. Лог в файл пишется. Мы его радмином забираем и смотрим.
> не похоже на проблему со связью, больше похоже что программа
> повисла напрочь (/вылетела), ищи глюки, лики, "причесывай
> код", и т.д. делай нормальный лог, без него не обойтись.
> а так "найди то не знаю что"...
Все бы ничего. Я тоже так полагал. Но подключаюсь радмином и вижу, что программа не висит (там если щелкнуть по значку в трее, открывается список принятых строк. Он записывается локально в файл и хранится там). Т.е. она работает. В случае отсутствия соединения там предусмотрена одна штука. В заголовке написано, что коннекта нет. Так вот открывая этот список, в заголовке это и написано. Т.е. она работает и реагирует на все. Но связи с базой не восстановила.
> а аналогичное подключение как у клиента "(ADSL соединение
> 512/512)" не пытались организавать?
Пытались. Делали. Все чики-пуки. Я же говорю... Основная проблема в том, что это происходит совсем не постоянно. А выделить одного человека, который будет сутками (а она гоняется именно сутками) ее гонять - пока возможности нет.
> посадите такую же для поиска у себя.
Сажали. Прикол в том, что вроде как (в теории конечно) не она виновата. Т.е. ее вина только в том, что она не знает где и что перезапустить. А если вы имели ввиду, что она могла напортачить, то тут процент вероятности маленьки. В программе всего две кнопки и щелчок по значку. Все. Т.е. как бы сложной функциональности в ней вроде как и нету.
Логи вставил. Буду ждать.
Но все же хотелось бы узнать, как же лучше всего организовать работу программы в этих условиях? Просто такое чувство, что я делаю это не совсем правильно или может не красиво, чтоли..
Т.е. переделать ее проблем нет. Главное знать на что переделать.
← →
Anatoly Podgoretsky © (2008-01-05 16:20) [3]> DeadMeat (05.01.2008 15:17:02) [2]
Переходи на веб сервисы. Тогда обрывы побоку.
← →
Виталий Панасенко(дом) (2008-01-05 20:06) [4]АСУБД какая ?
← →
DeadMeat © (2008-01-06 11:46) [5]
> Переходи на веб сервисы. Тогда обрывы побоку.
А можно чуток подробней? А то не понял чутка..
> АСУБД какая ?
MSSQL 2005 Enterprise SP2
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2008.06.08;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.044 c