У меня были проблемы с выполнением вызовов SOAP, потому что сервер, с которым я разговаривал, был .NET, который, очевидно, имеет проблемы со связью с SOAP :: Lite: http://msdn.microsoft.com/en-us/library/ms995764.aspx#soapliteperl_topic3
Даже если ваш сервер не является .NET, это еще один способ сделать ваш звонок (это работает для меня):
# proxy and uri strings should NOT have trialing slashes
my $_uri = 'http://youruri.com/whatever';
my $_proxy = 'http://yourproxy.com/something.asmx';
my $methodName = 'GetCategories';
my @params = (
SOAP::Data->name( 'token'=>'string' ),
);
my $handle = SOAP::Lite
->uri( $_uri )
->proxy( $_proxy , timeout => 30, keep_alive => 1 )
->on_action( sub{ $_uri . "/" . $_[1] } );
my $method = SOAP::Data
->name( $methodName )
->attr( {xmlns => $_uri . "/"} );
my $rv = $handle->call( $method=>@params );
if( $rv->fault() ){
print "SOAP Error ($methodName) :: " . $handle->transport()->status() . "\n\t" . $rv->faultcode() . ": " . $rv->faultstring();
} else {
print $rv->result();
}
Кроме того, глядя на ваш комментарий к одному из ответов
codeuse SOAP :: Lite;напечатать SOAP :: Lite -> uri ('webservices.uship.com/uShipsvc.asmx?WSDL';) -> proxy ('http: /webservices.uship.com') -> GetCategories ('myToken') -> result;
У вас может быть URI и прокси в обратном направлении.Т.е. прокси должен быть вашим .asmx (без "? WSDL").Если вы хотите использовать WSDL, это совершенно другой способ подключения, чем использование прокси-сервера uri +.Смотри: http://guide.soaplite.com/#access%20with%20service%20description%20%28wsdl%29