这Perl代码可与匿名访问的ASP.NET Web服务,但是当集成安全开启时,服务将返回401错误。 我想我需要使用NTLM模块与SOAP ::精简版相结合,但目前还不清楚如何这样做。 如何能够将这些组件集成?
use SOAP::Lite;
use strict;
my $proxy = "http://localhost:28606/WebService.asmx";
my $method_name = "HelloWorld";
my $uri = "http://tempuri.org/";
my $methodAction = $uri . $method_name;
my $soap = SOAP::Lite
->uri( $uri )
->proxy( $proxy )
->on_action(sub{ $methodAction; });
my $method = SOAP::Data->name($method_name)->attr({xmlns=>$uri});
my $result = $soap->call($method);
print $result->result();
你可以得到SOAP ::精简版如果你要打印一些调试输出:
use SOAP::Lite +trace;
代替
use SOAP::Lite;
编辑:
OK,我想我现在就买下。 打开集成的安全特性使IIS需要NTLM身份验证。 有一个在perlmonks.org线程过 ,似乎揭示了答案。
我有点晚了,但我只是遇到了同样的问题。 试试这个:
use LWP::UserAgent;
use LWP::Debug;
use SOAP::Lite on_action => sub { "$_[0]$_[1]"; };
import SOAP::Data 'name', 'value';
our $sp_endpoint = 'http://sp.example.com/sites/mysite/_vti_bin/lists.asmx';
our $sp_domain = 'sp.example.com:80';
our $sp_username = 'DOMAIN\username';
our $sp_password = 'xyz';
if ($debug) {
LWP::Debug::level('+');
SOAP::Lite->import(+trace => 'all');
}
my @ua_args = (keep_alive => 1);
my @credentials = ($sp_domain, "", $sp_usernam, $sp_password);
my $schema_ua = LWP::UserAgent->new(@ua_args);
$schema_ua->credentials(@credentials);
$soap = SOAP::Lite->proxy($sp_endpoint, @ua_args, credentials => \@credentials);
$soap->schema->useragent($schema_ua);
$soap->uri("http://schemas.microsoft.com/sharepoint/soap/");