Текущий архив: 2006.10.29;
Скачать: CL | DM;
Вниз
Ошибка до перехвата исключения Найти похожие ветки
← →
Валерий (2006-06-02 04:19) [0]Отправляю через IdTCPClient запрос на сервер.
Так как иногда бывают проблемы со связью - поставил ReadTimeOut.
Сделал try .. except для перехвата ошибок. Если ошибка типа неудачного коннекта или завершения - все нормально работает.
А когда ошибка из-за таймаута - вместо перехвата исключения и вывода моего сообщения - выдает системную ошибку.
Что делать? Что не так? Вот код:
try
IdTCPClient1.Connect;
idTCPClient1.SendCmd("GET http://site/123.php?id=1", -1);
finally
idTCPClient1.Disconnect;
end;
except
on E: EIdReadTimeout do
begin
ShowMessage("Ошибка: " + E.Message);
end;
end;
← →
Сергей М. © (2006-06-02 08:23) [1]try
IdTCPClient1.Connect;
try
idTCPClient1.SendCmd("GET http://site/123.php?id=1", -1);
finally
idTCPClient1.Disconnect;
end;
except
on E: Exception do
ShowMessage("Ошибка: " + E.Classname + " " + E.Message);
end;
← →
Валерий (2006-06-02 10:04) [2]Попробовал - все то же самое.
Если не сработал таймаут - выдает сообщение о grasfully, а если срабатывает таймаут - выкидывает с ошибкой
← →
REA (2006-06-02 10:19) [3]Поставь E: Exception и проверь ClassName. Не исключено, что это EIdProtocolReplyError
← →
Сергей М. © (2006-06-02 10:24) [4]HTTP Get-запрос подразумевает ожидание и получение ответа сервера.
Где в твоем коде это присутствует ?
← →
Валерий (2006-06-02 10:40) [5]Блин, а как тогда мне сделать? Мне нужно послать запрос на сервер и не обязательно, даже не желательно ждать ответ, так в некоторых случаях это может занять слишком много времени.
А насчет GET - можно и на POST переделать, только если честно - я не представляю как послать тогда POST-запрос...
← →
wal © (2006-06-02 10:49) [6]
> Мне нужно послать запрос на сервер и не обязательно, даже
> не желательно ждать ответ
А зачем тогда запрос посылать, если ответ не нужен?
← →
Валерий (2006-06-02 10:57) [7]Скрипт продолжает работу и результат отправляет в файл или БД (сейчас в БД). Эта часть работает. Собственно говоря - ставлю таймаут - idTCPClient1 коннектится к скрипту, потом из программы выкидывает с ошибкой, а через некоторое время (как и задумано) в БД появляется результат.
Просто есть скрипт, который ну очень долго будет работать - около 40 минут. Ждать в программе столько времени - неудобно.
← →
wal © (2006-06-02 11:06) [8]Значит на сервере идеология неправильная, правильно будет GET-запросом запустить маленький скрипт, который вернет ответ и запустит большой скрипт. А вообще, если все правильно делать, то GET-запросы не должны существенно изменять состояние сервера.
← →
Валерий (2006-06-02 11:09) [9]Насчет маленького и большого скрипта - это я понял...
А что значит GET-запросы не должны существенно изменять состояние сервера?
← →
wal © (2006-06-02 11:13) [10]
> [9] Валерий (02.06.06 11:09)
Ну я же не знаю, что у тебя большой скрипт делает. Например, нельзя GET-запросом сервис в даун отправлять. Кстати, на этом сайте какое-то время назад была история, когда на страничке администрирования сервера была ссылка на его выключение, а умный браузер решил эту ссылку загрузить и кэшировать, предполагая, что пользователь ее смотреть пойдет. Результат очевиден.
← →
Валерий (2006-06-02 11:20) [11]Да нет - скрипт просто перебирает страницы (что-то типа примитивного поискового робота) на поиск конкретной инфы, которую и посылаю через GET. Так как на сервере траффик не важен - решил так сделать. Но такой перебор очень долго идет и ожидать в программе его окончания - неудобно. Можно дальше работать, а потом просто забрать из БД результат. Вот и бьюсь. Я же не зацикливаюсь на GET. Если можно через POST послать так чтобы не ожидать ответа - то хорошо.
Но я больше специалист по PHP, чем по Delphi и плохо представляю - как это осуществить
← →
Валерий (2006-06-02 11:23) [12]Извиняюсь - может я такой тормоз...
Запускаю компиляцию - выдает ошибку при таймауте.
Решил просто так проверить - что произойдет при аналогичной ситуации при запуске готового exe - выдал запланированное сообщение? А чего так?
Выходит, что вопрос решился, но все равно я не понял - почему при других ошибках и в Delphi выдает мои сообщения, а при таймауте - системное сообщение и прерывает работу?
Всем спасибо. Повозился - столько полезного раскопал :-)))
Страницы: 1 вся ветка
Текущий архив: 2006.10.29;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.031 c