2012-02-29 131 views
1

我是新的perl web服务调用。Perl wsdl web服务调用

我打电话一个WSDL web服务功能,我得到了响应,400错误的请求错误。我尝试并搜索了很多网站,但无法取得成功。请帮我解决这个问题。以下是我的代码。

use SOAP::Lite; 
my $lite = SOAP::Lite -> service('http://localhost:8080/service.svc?wsdl'); 
my $arg1 ="SRC"; 
my $arg2 = "ARG"; 
my @arg3 = ('test1','test2','test3'); 
my @res = $lite->Func($arg1,$arg2,@arg3); 
print "@res"; 

回答

1

我刚做了类似的problem和似乎SOAP::Lite可能有关于处理复杂的数据结构中的错误。

无论如何,如果你的SOAP方法(Func)需要3个参数,最后一个应该是参考阵列。

此外,与use SOAP::Lite qw(trace)你可以调试请求信封。

+0

试图通过为参考,但还是说坏请求错误本身... :( – Naga 2012-03-01 17:40:11

+0

@Naga:所以下一步我sugegst是调试请求封装我敢打赌,第三个参数是从信封缺少这可能是原因之一对于不好的请求 – 2012-03-02 12:44:50

0

如果你没有在SOAP限制::精简版,我会请你,请看看XML::Compile::SOAP::Client

+0

没有运气...也尝试了上面的..也有同样的错误.... 400错误的请求.... – Naga 2012-03-01 21:36:50

0

我不知道有多少的差别是有WSDL和ASMX Web服务之间。如果没有太多,请尝试这个代码示例适合我。

my $soap = SOAP::Lite 
    -> uri('http://foo.com') 
    -> on_action(sub { join '/', 'http://foo.com', $_[1] }) 
    -> proxy('http://foo/services/GetEmailAddress/Service.asmx'); 

    my $method = SOAP::Data->name('GetEmailAddress') 
    ->attr({xmlns => 'http://foo.com/'}); 

    my @params = (SOAP::Data->name(username => $user)); 
    my $email = $soap->call($method => @params)->result; 

输入是用户名,输出是电子邮件地址。我相信ASMX网络服务是在.NET 3中创建的。

一切我知道如何工作的,我从http://msdn.microsoft.com/en-us/library/ms995764.aspx教训。

+0

尝试了上述...得到这样的错误“不能在接收器处理,这是由于EndpointDispatcher的ContractFilter不匹配造成的,这可能是由于合同不匹配(发送者和接收者之间的动作不匹配)或发送者和接收者之间的绑定/安全不匹配所致,请检查发送者和接收者是否有相同的合同,相同的绑定(包括安全要求,例如消息,传输,无)“ – Naga 2012-03-01 21:35:24