Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

SOAP timeout not working

by Velaki (Chaplain)
on Aug 18, 2010 at 17:52 UTC ( #855869=perlquestion: print w/replies, xml ) Need Help??
Velaki has asked for the wisdom of the Perl Monks concerning the following question:

I have a situation where my SOAP code works fine, up until the point I need to connect to a service that is unavailable. When I do, the process simply hangs.

The on_fault executes on call() after a few minutes, but never appears to return; instead, the process simply dies. No traps, eval doesn't protect it, no messages; just dies.

# This should work, not sure. use SOAP::Lite on_fault => sub { my $msg = "ERROR: "; my ($soap, $result) = @_; $msg .= ref $result ? $result->faultstring : $soap->transport->status; print STDERR "\tFault -> $msg\n"; }; # This works! my $c = eval { SOAP::Lite->uri($uri) ->on_action(sub { join '', @_ }) ->proxy($proxy); }; # This is suspect. $c->transport->timeout(5); # This hangs for minutes. my $r = eval { $c->call( SOAP::Data->name('FooService'), SOAP::Data->name('FooVar')->value($foo)->type('int')); };

And the timeout doesn't seem to work. Even when set to 2 seconds, it still hangs for minutes.


"Perl. There is no substitute."

Replies are listed 'Best First'.
Re: SOAP timeout not working
by Anonymous Monk on Aug 18, 2010 at 23:21 UTC
    It works for me
    #!/usr/bin/perl -- use strict; use warnings; BEGIN {warn scalar gmtime,"\n";} END {warn scalar gmtime,"\n";} #~ use SOAP::Lite 0.65 +trace => 'debug'; use SOAP::Lite 0.65 on_fault => sub { my $msg = "ERROR: "; my ($soap, $result) = @_; $msg .= ref $result ? $result->faultstring : $soap->transport->status; print STDERR "\tFault -> $msg\n"; }; my $soap = SOAP::Lite->uri("http://localhost/") ->proxy( 'http://localhost/blah/DummyService', timeout => 1 ); $soap->call( SOAP::Data->name('FooService'), SOAP::Data->name('FooVar')->value('$foo')->type('int'), ); __END__ $ perl Wed Aug 18 23:19:38 2010 Fault -> ERROR: 500 Can't connect to localhost:80 (connect: ti +meout) Wed Aug 18 23:19:39 2010

      Strangely enough, it's working now. I think a module was modified by the system people, because the version numbers are different.


      "Perl. There is no substitute."

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://855869]
Approved by Corion
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (5)
As of 2018-02-21 08:16 GMT
Find Nodes?
    Voting Booth?
    When it is dark outside I am happiest to see ...

    Results (276 votes). Check out past polls.