Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.08;
Скачать: CL | DM;

Вниз

Постоянные обрывы связи.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.023 c
15-1209307105
Turing machine
2008-04-27 18:38
2008.06.08
Turing Machine


2-1210784396
DJ_UZer
2008-05-14 20:59
2008.06.08
Зарегитрировать файл


3-1199315982
Николай_1
2008-01-03 02:19
2008.06.08
Нужна помощь


2-1209976099
Aleksei
2008-05-05 12:28
2008.06.08
Проверка нового файла на ФТП


15-1209195745
SysError
2008-04-26 11:42
2008.06.08
Дерево кода Делфи