Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Периодически не срабатывает обработчик события  [new]
Fish.K.A.
Member

Откуда:
Сообщений: 17
Всем доброго времени суток!

Столкнулся со проблемой, что ПЕРИОДИЧЕСКИ не срабатывает обработчик ошибок. Есть ПО установленное на сервере. Параметры сервера:

Windows Server 2008 R2 Enterprise
ОЗУ: 8ГГб

FireBird: WI-V2.5.7.27050 Firebird 2.5 - Classic (проблема была и на FB 2.5.2)
Версия fbclient.dll соответствует установленной версии FB. Других версий FB на сервере не установлено и никогда не было.

ПО написана с использование Delphi XE5 и FireDac. Общее количество событий зарегистрированных в FDADEventAlerter = 7

Все пользователи ПО запускают ее на сервере через RDP или RemoteApp (раскидывали прогу по сетевым компам проблема не исчезает).

Пытался менять порт, но все равно проблема остается.

Может кто-то уже сталкивался с такой ситуацией? Что порекомендуете?

Спасибо.
19 сен 17, 14:02    [20806060]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 43944

Fish.K.A.
Что порекомендуете?

Не использовать события если не понимаете как они работают и не умеете программировать
непосредственно на ISC API. Все дельфийские обёртки, что я встречал, вызывают только
недоумение своей кривизной (которая неизбежна в тщетных попытках сделать их универсальными).

Posted via ActualForum NNTP Server 1.5

19 сен 17, 14:24    [20806128]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
hvlad
Member

Откуда:
Сообщений: 9318
Fish.K.A.
Что порекомендуете?
1. 100500 раз перепроверить свой код.
2. Перепроверить код "того парня" - FireDac в данном случае.
3. Сделать воспроизводимый пример дя трекера, если ошибка не нашлась на предыдущих шагах.
19 сен 17, 14:34    [20806170]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 23234
hvlad
Fish.K.A.
Что порекомендуете?
1. 100500 раз перепроверить свой код.
2. Перепроверить код "того парня" - FireDac в данном случае.
3. Сделать воспроизводимый пример дя трекера, если ошибка не нашлась на предыдущих шагах.

0. Выключить антивирусы, брандмауэры, фаерволы etc.
19 сен 17, 15:17    [20806340]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
Fish.K.A.
Member

Откуда:
Сообщений: 17
hvlad, проекти переписывался FibPlus -> AnyDac -> FireDac и постоянно возникали эти проблемы.
Причем у себя я эту проблему словить не могу.

Выключить антивирусы, брандмауэры, фаерволы - выключены, настроены. Порты открыты.
19 сен 17, 15:20    [20806360]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 57692
А какую-нибудь закономерность не-срабатывания заметили?

P.S. Клиентское ПО на том же сервере, что и FB, правильно?

Posted via ActualForum NNTP Server 1.5

19 сен 17, 15:25    [20806388]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
Fish.K.A.
Member

Откуда:
Сообщений: 17
Dimitry Sibiryakov, Вы правы. Я не умею программировать непосредственно на ISC API....Есть какие-то примеры. Что почитать?
19 сен 17, 15:25    [20806395]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
Fish.K.A.
Member

Откуда:
Сообщений: 17
Гаджимурадов Рустам,

Вообще закономерности не увидел. Есть клиент у которого стоит на серваке, есть клиенты у которые и так и так.
19 сен 17, 15:27    [20806398]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 23234
Fish.K.A.,

можно обратить внимание на длительность подключения.
19 сен 17, 15:30    [20806408]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
o_v_a
Member

Откуда: Тула
Сообщений: 910
Таки явно прописать директиву RemoteAuxPort в конфиге Firebird на сервере и в файрволах этот же порт открыть
19 сен 17, 15:59    [20806482]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 43944

Проблемы с дополнительным подключением могут вызвать тотальную неработу событий. А у
аффтара - теряются некоторые из них. Это вызывается проблемами синхронизации потоков в
приложении.

Posted via ActualForum NNTP Server 1.5

19 сен 17, 16:07    [20806505]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 2468
Fish.K.A.
Что порекомендуете?

1. Определиться, что значит "Не срабатывают". Клиент запущен всегда и получает 1-е и 3-е событие, а 2-е не получает? Может, он был закрыт или отсоединен от базы в этот момент? Или события в этот момент не были зарегистрированы?
В 1-ю очередь необходимо железно установить, что события таки пропускаются в идеальном состоянии клиента.
2. Завязываться на то, что событие будет точно получено и обработано в любом случае нельзя (клиент может начать закрываться в момент, когда сервер ему его шлет - один из примеров).
Необходимо строить логику таким образом, чтобы получение события только помогало, но не было обязательным для верной работы логики программы.
19 сен 17, 17:21    [20806829]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
hvlad
Member

Откуда:
Сообщений: 9318
Fish.K.A.
hvlad, проекти переписывался FibPlus -> AnyDac -> FireDac и постоянно возникали эти проблемы.
Причем у себя я эту проблему словить не могу.
А откуда уверенность, что проблема вообще есть ?
19 сен 17, 18:31    [20807001]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
Fish.K.A.
Member

Откуда:
Сообщений: 17
hvlad,

При запуске программы я делаю проверку. Добавляю строку в таблицу и получаю соответствующее событие. Вот и получается, что у меня может N раз нормально открыться, а потом M без получения события.
Если ПО открылось нормально и проверка на получения события прошла нормально, то потом в запущенном экземпляре ПО проблем не возникает.
19 сен 17, 20:09    [20807214]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
Fish.K.A.
Member

Откуда:
Сообщений: 17
YuRock
Необходимо строить логику таким образом, чтобы получение события только помогало, но не было обязательным для верной работы логики программы.


Логика следующая. Есть ПО1 и ПО2. ПО1 сохраняет определенную информацию в базу, после commit ПО2 должна получить эту информацию.
19 сен 17, 20:15    [20807227]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
hvlad
Member

Откуда:
Сообщений: 9318
Fish.K.A.,

всё что можно сказать на данный момент - ошибка в 17-ой строке, увы.

Значимой информации нет. Есть только стук в подвале.
Нужно или воспроизводить, или искать ошибку у себя.

PS Что в обработчике события ?
19 сен 17, 20:41    [20807281]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
Fish.K.A.
Member

Откуда:
Сообщений: 17
hvlad, сорри. Не совсем понял что надо?
19 сен 17, 20:53    [20807303]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
hvlad
Member

Откуда:
Сообщений: 9318
Fish.K.A.
hvlad, сорри. Не совсем понял что надо?
Я имел в виду - что написано в обработчике события ? Которое наверняка есть в FDADEventAlerter.
Хоть тут Delphi никто и не знает - показывай, вдруг что увидим.
19 сен 17, 21:02    [20807323]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
Fish.K.A.
Member

Откуда:
Сообщений: 17
hvlad,

Если Вы имеете ввиду событие компонента onAlert, то там вообще все просто:

    //----
    if CompareText(AEventName, 'EVENTTEST') = 0 then
    begin
      Timer1.Enabled := False;
    end;
19 сен 17, 21:08    [20807334]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 2468
Fish.K.A.
Если ПО открылось нормально и проверка на получения события прошла нормально, то потом в запущенном экземпляре ПО проблем не возникает.

Необходимо убедиться, что регистрация событий всегда проходит, и без ошибок. Я не знаю, как там в FDADEventAlerter, но скорее всего там есть что-то типа AutoRegister, так вот я бы его отключил и вызвал регистрацию вручную. Продебажил бы (залогировал результаты параметры и результаты функции регистрации, в моем древнем IBX она "выглядит" как "Tsib_event_block(isc_event_block)"). Исходники-то есть наверняка.
19 сен 17, 21:40    [20807391]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
Fish.K.A.
Member

Откуда:
Сообщений: 17
YuRock,

Мысль имеет место быть. НО! На моем компе все работает нормально и такая ситуация случается крайне редко, а следовательно сложно поймать момент для трасеровки.
19 сен 17, 21:44    [20807401]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 2468
Fish.K.A.
На моем компе все работает нормально и такая ситуация случается крайне редко
Значит таки иногда случается? :)

В чем проблема? Напиши тест - кусочек твоей программы - после проверки выход. И из другой программы запусти этот тест 100000 раз. Можешь до ExitCode=1, чтоб тест прекратить в случае 1-й же ошибки.
19 сен 17, 22:32    [20807523]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
hvlad
Member

Откуда:
Сообщений: 9318
Fish.K.A.,

Timer1 как-то связан с events ?
19 сен 17, 22:36    [20807532]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 2468
hvlad,

Он наверно в обработчике таймера принимает решение, что эвент не пришел и программу надо закрывать.
19 сен 17, 23:09    [20807601]     Ответить | Цитировать Сообщить модератору
 Re: Периодически не срабатывает обработчик события  [new]
Fish.K.A.
Member

Откуда:
Сообщений: 17
YuRock
В чем проблема? Напиши тест - кусочек твоей программы - после проверки выход. И из другой программы запусти этот тест 100000 раз. Можешь до ExitCode=1, чтоб тест прекратить в случае 1-й же ошибки.


Я делал простой тест. Правда запускал его вручную. Проблема то же проскакивала.


hvlad
Timer1 как-то связан с events ?


procedure TDM.Timer1Timer(Sender: TObject);
Var
  A: string;
  AR: String;
  LogFilePath: String;
begin
  if FDADEventAlerter.Active then
    A := 'FDADEventAlerter.Active = TRUE'
  else
    A := 'FDADEventAlerter.Active = FALSE';

  if FDADEventAlerter.Options.AutoRegister then
    AR := 'FDADEventAlerter.Options.AutoRegister = TRUE'
  else
    AR := 'FDADEventAlerter.Options.AutoRegister = FALSE';


  ShowError('Не включен обработчик событий. Необходимо перезапустить программу!'+CRLF+
            A+CRLF+
            AR+CRLF+
            FDADEventAlerter.Names.Text);

  LogFilePath := ExtractFilePath(ParamStr(0))+'EventError.log';
  SaveToFile(LogFilePath, FormatDateTime('dd-mm-yyyy hh:mm:ss - Не включен обработчик событий [' + WTCRMUSERNAME + '] - ['+WTCRMSTATIONNAME+'] ', Now));

  EventAlertFunction;


 { FDDB.Close;
  FDDB.Open;

  if FDADEventAlerter.Active then
    FDADEventAlerter.Active := False
  else
    FDADEventAlerter.Active := True;

  EventAlertFunction;}
end;


function TDM.EventAlertFunction: boolean;
var
  tmp: String;
begin
  if not DSet_UnitTest.Active then
    DSet_UnitTest.Open;

  UnitTestWriteTransaction.StartTransaction;
  try
    Timer1.Enabled := True;

    tmp := 'DSet_UnitTest.Append';
    DSet_UnitTest.Append;
    tmp := 'DSet_UnitTest.Post';

    DSet_UnitTest.Post;

    tmp := 'UnitTestWrite.Commit';

    UnitTestWriteTransaction.Commit;
  except
    on E:Exception do
    begin
      ShowMessage(Format('Ошибка добавления [%s]',[tmp])+#10#13+E.Message);
      UnitTestWriteTransaction.Rollback;
      DSet_UnitTest.Cancel;
    end;
  end;
end;
20 сен 17, 13:23    [20808763]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Firebird, InterBase Ответить