Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical

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 the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (8)
As of 2018-11-21 18:34 GMT
Find Nodes?
    Voting Booth?
    My code is most likely broken because:

    Results (248 votes). Check out past polls.