Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.042 c
2-1210639780
SadDragon
2008-05-13 04:49
2008.06.08
Движение точки по окружности


10-1146837285
Teddy24
2006-05-05 17:54
2008.06.08
Проблема подключенения DCOMConnection


15-1208984130
AlexDan
2008-04-24 00:55
2008.06.08
Ноу-хау IBM


2-1210934727
snake-as
2008-05-16 14:45
2008.06.08
Добавить две серии в Chart


15-1208941969
ekto
2008-04-23 13:12
2008.06.08
В MySQL 5 нет StoredProc?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский