Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

SOAP timeout not working

by Velaki (Chaplain)
on Aug 18, 2010 at 17:52 UTC ( [id://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.

Thoughts?

"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 test.pl 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.

      Thanks!

      "Perl. There is no substitute."
      But the following does not work:
      #!/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://host/") ->proxy( 'http://host/blah/DummyService', timeout => 1 ); $soap->call( SOAP::Data->name('FooService'), SOAP::Data->name('FooVar')->value('$foo')->type('int'), );
      No message after the timeout time.
        And then what happened?

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://855869]
Approved by Corion
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (5)
As of 2024-04-19 10:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found