• 0
zekelive

Переподключение к серверу (DataSnape)

Вопрос

Кто работал с DS, подскажите, как реализовать автоматическое переподключение к серверу после тайм-аута? Пробовал кучу вариантов, но не могу отловить момент отключения даже, да и тайм-аут не настраивается. Параметр есть, но реагировать на измененные значения не хочет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

7 ответов на этот вопрос

  • 0

эмм... а речь о переподключении к какому серваку?... от клиента к DS или от DS к какому нибудь серваку?

если от клиента к DS то у SQLSonnection есть свойство AfterDisconnect. Имхо, стоит избегать постоянного коннекшна, если конечно это возможно. У меня обычно по необходимости подымается коннешн и отрубается после завершения синхронизации.

если второй вариант ... то аналогичное свойство используемого компонента подключения

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

если рассуждать логически, нет никакого дисконнекта, есть отсутствие связи при попытке что-то передать

т.е. дисконнект это в основном - обработка ошибок при обмене

пытаемся вызывать что-то, ошибка - переподключение...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
39 минут назад, beklexx сказал:

эмм... а речь о переподключении к какому серваку?... от клиента к DS или от DS к какому нибудь серваку?

если от клиента к DS то у SQLSonnection есть свойство AfterDisconnect. Имхо, стоит избегать постоянного коннекшна, если конечно это возможно. У меня обычно по необходимости подымается коннешн и отрубается после завершения синхронизации.

если второй вариант ... то аналогичное свойство используемого компонента подключения

 

Да. Именно от клиента к DS. Ситуация такова, что пользователь пользовался программой, потом выключил экран и кинул в карман. Через 10 минут достает чтобы снова воспользоваться но клиентская программа уже отключилась от сервера. И приходится закрывать и снова оикрывать приложение. Как сделать так, чтобы при активации формы заново пооисходила процедура подключение ( как при первом запуске программы).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
26 минут назад, krapotkin сказал:

если рассуждать логически, нет никакого дисконнекта, есть отсутствие связи при попытке что-то передать

т.е. дисконнект это в основном - обработка ошибок при обмене

пытаемся вызывать что-то, ошибка - переподключение...

Согласен с вами, отсутствие связи. Как эту связь восстановить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

также как и в первый раз

if NOT(dm.SQLConnection1.Connected) then
  try
    dm.SQLConnection1.Connected:= True;
....

хотя если реально при отключении связи не происходит дисконнект, то 

if dm.SQLConnection1.Connected then dm.SQLConnection1.Connected:= False;
try
  dm.SQLConnection1.Connected:= True;
....

 

Изменено пользователем beklexx
Kitty понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

я обычно проверяю связь до сервака, прежде чем SQLConnection врубать... чем то типа:

function Tdm.CheckConnect: boolean;
var res: boolean;
begin
  try
    IdTCPClient1.ReadTimeout:= 10000;
    IdTCPClient1.ConnectTimeout:= 10000;
    IdTCPClient1.Connect;
    IdTCPClient1.Disconnect;
    res:=true;
  except
    res:=false;
  end;
  Result:= res;
end;

установив мои IdTCPClient1.Port и IdTCPClient1.Host

Изменено пользователем beklexx

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0
47 минут назад, beklexx сказал:

также как и в первый раз


if NOT(dm.SQLConnection1.Connected) then
  try
    dm.SQLConnection1.Connected:= True;
....

хотя если реально при отключении связи не происходит дисконнект, то 


if dm.SQLConnection1.Connected then dm.SQLConnection1.Connected:= False;
try
  dm.SQLConnection1.Connected:= True;
....

 

Что то птдобное пробовал уже, но попробую Ваш вариант. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Похожие публикации

    • Автор: Alex7wrt
      Добрый день.
      Имеется приложение, которое реализовано в портретной и альбомной ориентации. При повороте экрана срабатывает событие TForm.OnResize, в котором производятся изменения размеров и положения элементов.
      В Андроиде при повороте все происходит плавно, а в iOS на долю секунды мигает экран с изменённым положением контролов и только потом перерисовывается. Почему так происходит и как это можно исправить?
    • Автор: Makhammadjon
      Доброго времени суток! У меня вопрос, если можно объясните пожалуйста: я пишу программу с помощью С++ builder Seattle 10 (версия) для андроид платформы, но возникает проблема с загрузкой AUDIO файлов, в *.apk файл не грузится аудиофайлы. Невозможно изменить playaudiofile коды в sample. Объясните как можно  чтобы аудиофайлы грузились в андроид платформы. Спасибо за ответ!
    • Автор: Anasazi
      Всем привет. Столкнулся со следующей проблемой после активации tedit при попытке создать любое намерение (для набора номера или открытия ссылки) программа наглухо зависает. И наоборот после создания и выполнения намерения, если перейти к tedit происходит глухое зависание. Тоже самое происходит и с memo.
      Проблема похожа на описанную в этой теме, но решение из нее не помогает
      Чем заменить tedit не знаю, пробовал все возможные варианты. Функции работы с намерениями рабочая и если не активировать tedit то все работает отлично.
      Пробовал на разных устройствах, результат тот же. Правда на всех устройствах был Android 5.
       
      Подскажите пожалуйста, возможно ли под android создать диалоговое окно с вводом текста? Или может быть есть еще какие-нибудь способы ввода текста?
       
    • Автор: Rusland
      Как узнать что MediaPlayer закончил воспроизведение аудио/видео файла?
      С 2015 года что-нибудь изменилось?
    • Автор: SerhioUser
      Есть прога(c++) на сервере под Windows. К ней подключаются девайсы под андроид и проверяют обновление некого андроид-приложения. Прога на сервере должна узнать версию лежащего локально apk-файла и сообщить ее девайсу.
      Теоретически можно с помощью aapt получить AndroidManifest.xml файл и вытащить версию от туда. А если ли какие стандартные средства, чтобы узнать версию APK под Windows?
    • Автор: Евгений Корепов
      Провел небольшое исследование поведения таймера Posix в сервисе. Результаты не очень. Таймер ведет себя так же как и в приложении, главное отличие - не умирает окончательно, но рассчитывать на него не стоит.
      Перед экспериментом было отключено энергосбережение, экономия трафика во сне (телефон работал через wifi), т.е. созданы все условия для долгой и стабильной работы.
      2017-02-24 23:22:51 - телефон ушел в сон. Таймер начал работать эпизодически, с провалами до получаса.
      2017-02-25 07:24:58 - я проснулся и разблокировал телефон. Таймер опять нормально заработал.
      В следующей серии попробую протестировать сервис с AlarmManager, что то у меня подозрения что результаты будут не лучше.
      2017-02-25 07:27:58 Posix-таймер в сервисе. Запрос раз в 60 сек. № 108 2017-02-25 07:26:58 Posix-таймер в сервисе. Запрос раз в 60 сек. № 107 2017-02-25 07:25:58 Posix-таймер в сервисе. Запрос раз в 60 сек. № 106 2017-02-25 07:24:58 Posix-таймер в сервисе. Запрос раз в 60 сек. № 105 2017-02-25 07:21:05 Posix-таймер в сервисе. Запрос раз в 60 сек. № 104 2017-02-25 07:14:00 Posix-таймер в сервисе. Запрос раз в 60 сек. № 103 2017-02-25 07:01:59 Posix-таймер в сервисе. Запрос раз в 60 сек. № 102 2017-02-25 06:46:33 Posix-таймер в сервисе. Запрос раз в 60 сек. № 101 2017-02-25 06:24:50 Posix-таймер в сервисе. Запрос раз в 60 сек. № 100 2017-02-25 06:13:58 Posix-таймер в сервисе. Запрос раз в 60 сек. № 99 2017-02-25 05:51:32 Posix-таймер в сервисе. Запрос раз в 60 сек. № 98 2017-02-25 05:30:07 Posix-таймер в сервисе. Запрос раз в 60 сек. № 97 2017-02-25 05:16:28 Posix-таймер в сервисе. Запрос раз в 60 сек. № 96 2017-02-25 05:07:28 Posix-таймер в сервисе. Запрос раз в 60 сек. № 95 2017-02-25 05:00:41 Posix-таймер в сервисе. Запрос раз в 60 сек. № 94 2017-02-25 04:41:01 Posix-таймер в сервисе. Запрос раз в 60 сек. № 93 2017-02-25 04:21:19 Posix-таймер в сервисе. Запрос раз в 60 сек. № 92 2017-02-25 04:00:40 Posix-таймер в сервисе. Запрос раз в 60 сек. № 91 2017-02-25 03:41:33 Posix-таймер в сервисе. Запрос раз в 60 сек. № 90 2017-02-25 03:16:59 Posix-таймер в сервисе. Запрос раз в 60 сек. № 89 2017-02-25 03:02:01 Posix-таймер в сервисе. Запрос раз в 60 сек. № 88 2017-02-25 02:44:54 Posix-таймер в сервисе. Запрос раз в 60 сек. № 87 2017-02-25 02:23:49 Posix-таймер в сервисе. Запрос раз в 60 сек. № 86 2017-02-25 02:10:28 Posix-таймер в сервисе. Запрос раз в 60 сек. № 85 2017-02-25 01:52:11 Posix-таймер в сервисе. Запрос раз в 60 сек. № 84 2017-02-25 01:32:57 Posix-таймер в сервисе. Запрос раз в 60 сек. № 83 2017-02-25 01:28:26 Posix-таймер в сервисе. Запрос раз в 60 сек. № 82 2017-02-25 01:27:26 Posix-таймер в сервисе. Запрос раз в 60 сек. № 81 2017-02-25 01:26:26 Posix-таймер в сервисе. Запрос раз в 60 сек. № 80 2017-02-25 01:25:27 Posix-таймер в сервисе. Запрос раз в 60 сек. № 79 2017-02-25 01:10:59 Posix-таймер в сервисе. Запрос раз в 60 сек. № 78 2017-02-25 01:00:27 Posix-таймер в сервисе. Запрос раз в 60 сек. № 77 2017-02-25 00:38:59 Posix-таймер в сервисе. Запрос раз в 60 сек. № 76 2017-02-25 00:19:22 Posix-таймер в сервисе. Запрос раз в 60 сек. № 75 2017-02-25 00:01:27 Posix-таймер в сервисе. Запрос раз в 60 сек. № 74 2017-02-24 23:51:15 Posix-таймер в сервисе. Запрос раз в 60 сек. № 73 2017-02-24 23:30:37 Posix-таймер в сервисе. Запрос раз в 60 сек. № 72 2017-02-24 23:22:51 Posix-таймер в сервисе. Запрос раз в 60 сек. № 71 2017-02-24 23:21:51 Posix-таймер в сервисе. Запрос раз в 60 сек. № 70 2017-02-24 23:20:51 Posix-таймер в сервисе. Запрос раз в 60 сек. № 69 2017-02-24 23:19:51 Posix-таймер в сервисе. Запрос раз в 60 сек. № 68 2017-02-24 23:18:51 Posix-таймер в сервисе. Запрос раз в 60 сек. № 67 2017-02-24 23:17:52 Posix-таймер в сервисе. Запрос раз в 60 сек. № 66 2017-02-24 23:16:52 Posix-таймер в сервисе. Запрос раз в 60 сек. № 65  
    • Автор: Mazzay
      Всем добрый день!
      Приоритет нитки для Windows имеет тип TThreadPriority:
      enum DECLSPEC_DENUM TThreadPriority : unsigned char { tpIdle, tpLowest, tpLower, tpNormal, tpHigher, tpHighest, tpTimeCritical }; __property TThreadPriority Priority = {read=GetPriority, write=SetPriority, nodefault}; Тут по названиям элементов множества всё предельно понятно.
       
      Для Android тип уже int:
      __property int Priority = {read=GetPriority, write=SetPriority, nodefault}; Нигде не могу найти возможные варианты значений для приоритета. Кто-нибудь знает?
       
    • Автор: notricky
      Собственно вопрос, можно ли вызывать АктивитиДиалог из рабочего потока в андроид или это будет приводить к ошибкам?
    • Автор: notricky
      На Android код, который работает исправно на Win  вызывает ошибку "CalledFromWrongThreadException: Only the original thread that created a view hierarcy can touch its views" 
      Смысл таков, что я пытаюсь показать форму из треда, у которой BorderStyle=none (роли это не играет).
      Решение в Андроиде заключается в том, чтобы пускать через  runOnUiThread  (то есть выполнять интерфейсные штуки в главном потоке). Как я понимаю, в firemonkey эту фичу должен выполнять Synchronize().
      Тем не менее, ошибка возникает.
      А при запуске в режиме дебага на андроид девайсе событие кнопки вообще не срабатывает иногда. А если срабатывает, то возникает описанное выше исключение.
      Я собрал тестовый пример и в нем не сразу видна ошибка, тогда как получил я ее на рабочем проекте.
      Цель: показать бизибокс на время бекграундных действий. Этот бизибокс у меня сначала был просто на каждой форме и я интерфейсно его вызывал, но теперь решил сделать отедльной формой (как и тоаст), но почему так происходит я не понял. Вы что скажете?
       
      unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; TWorkThread = class(TThread) public procedure Execute; override; end; var Form1: TForm1; implementation {$R *.fmx} uses unit2; procedure TForm1.Button1Click(Sender: TObject); var t: TWorkThread; begin t := TWorkThread.Create(True); t.FreeOnTerminate := true; t.Start; end; { TWorkThread } procedure TWorkThread.Execute; begin inherited; Self.Synchronize(procedure begin Form2.Show; Form2.Top := Form1.Top; Form2.Left := Form1.Left; Form2.BringToFront; end); Terminate; end; end.  
    • Автор: rakhmet
      TListView, как внезапно выяснилось, напрочь игнорирует системный размер шрифта и в iOS, и в Android. Есть решение, как его можно заставить соответствовать системным настройкам, или же никто не грузит себя этой ерундой?
      Наверняка и многие другие компоненты не утруждают себя соответствием системным настройкам, но меня пока интересует только TListView.
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу