Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.10.29;
Скачать: [xml.tar.bz2];

Вниз

Ошибка до перехвата исключения   Найти похожие ветки 

 
Валерий   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.044 c
15-1160057772
ArtemESC
2006-10-05 18:16
2006.10.29
Работа...


4-1150277816
DmitryA
2006-06-14 13:36
2006.10.29
Кеширование файлов в LAN


15-1159967067
Kolan
2006-10-04 17:04
2006.10.29
Нужна программа для создания рамок по госту.


2-1160632579
Wolfram
2006-10-12 09:56
2006.10.29
Как объявить константный массив структур?


2-1160947024
Mavzik
2006-10-16 01:17
2006.10.29
Порядок передачи фокуса





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский