Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: SOAP побороть ошибку 500 Connect failed  (Прочитано 8677 раз)
0 Пользователей и 1 Гость смотрят эту тему.
PVE
Гость
« : 07-06-2009 16:12 » 

Есть код:
use strict;
use Time::Local;
use DBI;
use SOAP::Lite;
my $s = SOAP::Lite
-> uri('...')
-> proxy('...');
my $sen = $s -> call(SOAP::Data -> name('command') =>
SOAP::Data -> name('package') -> attr({'login' => '...', 'password' => '...'}) ->
value(\SOAP::Data -> value(
SOAP::Data -> name('pdu') -> value(\SOAP::Data -> value(
SOAP::Data -> name('header') -> value(\SOAP::Data -> value(
SOAP::Data -> name('command-id') -> value('query_sm') -> type(''),
SOAP::Data -> name('sequence-number') -> value('00000001') -> type(''))),
SOAP::Data -> name('body') -> value(\SOAP::Data -> value(
SOAP::Data -> name('message-id') -> value($mid) -> type(''),
SOAP::Data -> name('source-addr') -> value($pod) -> type('')))))))
);
Этот скрипт является функцией программы которая работает в виде демона, весящая в процессе и ждущая отправки запроса. Когда данная команда поступает, то эта функция запрашивает сервер по SOAP`у и выдает ответ. В программе стоит прерывание в 1 секунду, между запросами на сервер. Но возникает ошибка 500 Connect failed: connect: Operation timed out; Operation timed out at (т.е. удаленный сервер не отвечает) и демон останавливает работу. Как сделать так, чтобы он пропускал эту ошибку и не обращал внимание на то, что ему сервер отвечает такие гадости =))) и продолжал работать? Заранее спасибо за ответ! =)))
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 08-06-2009 03:49 » 

Например, использовать eval { } в качестве блока try-catch.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
PVE
Гость
« Ответ #2 : 08-06-2009 05:14 » 

Сделал вот так -

Строка 19 - eval { $sen = $s -> call(SOAP::Data -> name('command') =>
                      SOAP::Data -> name('package') -> attr({'login' => '...', 'password' => '...'}) ->
                      value(\SOAP::Data -> value(
                      SOAP::Data -> name('pdu') -> value(\SOAP::Data -> value(
                      SOAP::Data -> name('header') -> value(\SOAP::Data -> value(
                      SOAP::Data -> name('command-id') -> value('query_sm') -> type(''),
                      SOAP::Data -> name('sequence-number') -> value('00000001') -> type(''))),
                      SOAP::Data -> name('body') -> value(\SOAP::Data -> value(
                      SOAP::Data -> name('message-id') -> value($mid) -> type(''),
                      SOAP::Data -> name('source-addr') -> value($pod) -> type('')))))))
                      );
       }; die "Error: $@\n" if $@;

Но проблема не исчезла =((( Демон как отрубался так и отрубается, показывая ошибку Error: 500 Connect failed: connect: Operation timed out; Operation timed out at ./test.pl line 19
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 08-06-2009 05:22 » 

PVE, eval перехватывает все ошибки. Убери die после eval и проверь еще рах.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
PVE
Гость
« Ответ #4 : 08-06-2009 05:42 » new

RXL, спасибо, вроде работает, ну по крайней мере, он так долго еще не работал, обычно через минуту отрубался =)))) В случае чего напишу, спасибо еще раз! =)))
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines