• 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;
....

 

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

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


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

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

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

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

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


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

Войти

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


Войти сейчас

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

    • Автор: Аров Марат (Coolmarat)
      Здравствуйте, коллеги.
      При написании клиента под андроид для Datasnap сервера столкнулся с проблемой, что из телефона строки с русскими буквами
      уходят в нечитаемом виде на сервер. При запуске приложения под Windows проблемы нет. Даже тестовые методы, генерируемые
      мастером создания DataSnap сервера (EchoString, ReverseString) не работают с русским текстом при запуске клиента на
      андроиде. Прилагаю тестовые проекты сервера и клиента с вызовом одной только функции ReverseString - у меня все равно
      выходят кракозябры. Помогите разобраться, как правильно передавать строки с русскими буквами.

      DSTestStrAndroidServer.zip
      DSTestStrAndroidClient.zip
    • Автор: Митя Гринюк
      Когда мы на Андроид устройстве клавишей переходим в TaskManager (Менеджер запущенных приложений), мы видим наши Недавние или Запущенные приложения в виде прямоугольников/квадратов.
      А именно: квадратный "скриншот" вместимости приложения и над "скриншотом приложения" размещается TopBar, на котором отображается некоторая информация (ярлык, название приложения и цвет, читаемый с приложения, а именно colorPrimary приложения).   {Android L}
      В моём приложении, независимо от colorPrimary/colorPrimaryDark, TopBar имеет черный цвет.
      Можно ли это как-то изменить?
      Embarcadero RAD 10.2 Tokyo, Delphi.
      (использую модуль, который окрашивает даже StatusBar)
      Ниже прикреплены изображения для ознакомления с терминами.
       
       
    • Автор: Rusland
      Приложение свернуто или закрыто.
      Отправляю один пуш, на телефоне в шторке появляется уведомление.
      Отправляю еще один, появляется второе уведомление и так далее. Сколько пушей, столько и уведомлений.
      Как сделать чтобы все уведомления собирались в одном уведомлении в шторке? (как делают telegram, whatsapp и т. п.)
    • Автор: Astghik
      How to print text from Android (IOS) device ? (C++ Rad Studio 10.2)
      With USB printer and other types printers (WiFi, Bluetooth ....)
    • Автор: Rionn
      В этой ссылке показан пример работы в одной сети (написано курсивом). Не могу найти, чтобы PC работал по сети или по WiFi, а телефон по мобильным данным. Не подскажете?
    • Автор: Евгений Корепов
      Наткнулся тут на изящную штуку для приложения с PUSH уведомлениями на Android и Ios. Один объект, все сам делает.
      Внедрил в одно боевое приложение с 100+ тысячами установок, полет нормальный.
      Описание тут https://delphiworlds.com/2017/04/firebase-cloud-messaging-android-ios/
      Исходный код с примером на гитхабе https://github.com/DelphiWorlds/PushClient
      Использование максимально простое:
      uses DW.PushClient; .... private FPushClient: TPushClient; procedure PushClientChangeHandler(Sender: TObject; AChange: TPushService.TChanges); procedure PushClientReceiveNotificationHandler(Sender: TObject; const ANotification: TPushServiceNotification); .... procedure TFormMain.InitPushService; begin FPushClient := TPushClient.Create; FPushClient.GCMAppID := ConstGCMAppID; FPushClient.ServerKey := ''; FPushClient.BundleID := ''; FPushClient.UseSandbox := Debug; // Change this to False for production use! FPushClient.OnChange := PushClientChangeHandler; FPushClient.OnReceiveNotification := PushClientReceiveNotificationHandler; try FPushClient.Active := True; except SendError('FPushClient.Active Exception'); end; end; procedure TFormMain.PushClientChangeHandler(Sender: TObject; AChange: TPushService.TChanges); begin if TPushService.TChange.DeviceToken in AChange then begin HDevicePushParams.DeviceID:=FPushClient.DeviceID; HDevicePushParams.DeviceToken:=FPushClient.DeviceToken; GetHTTP(CommandRegisterFCM); // Memo1.Lines.Add('DeviceID = ' + FPushClient.DeviceID); // Memo1.Lines.Add('DeviceToken = ' + FPushClient.DeviceToken); end; end; procedure TFormMain.PushClientReceiveNotificationHandler(Sender: TObject; const ANotification: TPushServiceNotification); begin // ShowMessage(ANotification.DataObject.ToString... end; Правда руки не дошли разобраться для чего ему 
        FPushClient.ServerKey := '';
        FPushClient.BundleID := '';
      Но и без этого работает.
       
    • Автор: Golovanyuk
      Здравствуйте!
      У меня проблемы при создании Android программ.
      Когда компилирую проект и запускаю его из среды Delphi сразу на мобильник, то первый раз программа еще работает, а во второй-третий раз на мобильнике показывается только заставка с огнем, а потом черный экран, а в самой среде в самом низу (где Event log и где обычно показываются процессы) - ничего нет, пусто.
      Потом приходится перезапускать Delphi.
      У меня есть подозрения, что я неправильно настроил Delphi.
      Не могли бы гуру взглянуть на мои настройки и указать на мои ошибки?
      Скриншоты приложил, спасибо.
      P,S, Delphi 10.1



    • Автор: delphiex
      Всем доброго дня. Прошу помочь, любая малейшая подсказка прояснит ситуацию. Сделал русскоязычное Андроид приложение на Delphi XE8.  Использовал SQlite в своем проекте. Работает отлично, оттестировал на Android 6.0 и  Android 4.5 на двух разных аппаратах. Прежде чем делать мультиязычное приложение, решил проверить как оно будет работать, если язык системы будет отличным от русского. Поставил английский-United Kingdom и приложение не запустилось, вернее пошла заставка, после нее  приложение просто закрылось без ошибок. То же самое при французском, испанском системных языках. А вот при немецком и украинском языке системы - работает. В чем здесь дело никак не могу понять и куда копать. Приложение не могу предоставить - слишком большое.
    • Автор: Алмаз Амангельды
      Multi device application 
      Работаю  с WebBrowser и появляется такая проблема что компонент дублируется появляется тоненькая полоска (пикселей 10 или 5 ) которая работает отдельно (т.е можно скролить страницу в разные направления ,  поэтому складывается впечатление что данный компонент Дублируется )
      Вверху tabcontrol к нему добавлен Эффект shadow внизу
      twebBrowser  Align =Client 
      И все эти компоненты лежат на panel 
      Align =client 
       
      Тестирую на экране 5.5
      Естественно вопрос что произошло и как это исправить 
    • Автор: ENERGY
      Как залить с Delphi Android в базу MySql строки, я примерно понял - составляем GET запрос и вставляем строки в параметры, затем считываем их в PHP скрипте и в базу.
      А вот как быть с картинкой. Как добавить картинку через PHP скрипт из программы на Android?
      POST запрос? Кто нибудь делал такое уже?
      Спасибо 
       
      P.s. На данный момент FireDAC не поддерживает работу с MySQL из под Android. Пока только SQLite и  InterBase ToGo. Даже если в будущем будет поддерживать, многие на этом форуме рекомендуют не использовать прямое подключение к базам из под мобильных систем, а использовать прямые GET запросы к примеру к PHP скриптам. Это связано с нестабильностью интернета т.к. так интернет может часто переключаться (от вышки к вышке) и менять параметры подключения. 
  • Сейчас на странице   0 пользователей

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