答案 0 :(得分:0)
首先指向wget / curl / lwp / etc。在http://velecloudserver/fortress/dragnetwebservice.asmx?WSDL 并查看是否获得了WSDL文件。
如果这样做,则将其与SOAP :: Lite POD中列出的四种类型进行比较。 您的Request示例看起来像Docment / Literal表单,因此您最终可能会写这样的内容:
use SOAP::Lite;
my $soap = SOAP::Lite->new( file => 'http://velecloudserver/fortress/dragnetwebservice.asmx?WSDL');
$soap->on_action( sub { "urn:dragnetservice#LoginPlainText" });
$soap->autotype(0);
$soap->default_ns('urn:LoginPlainText');
my $som = $soap->call("LoginPlainText",
SOAP::Data->name('strLogin')->value( 'admin' ),
SOAP::Data->name('strPassword')->value('Adm1234'),
);
die $som->fault->{ faultstring } if ($som->fault);
print $som->result, "\n";
如果你没有得到WSDL,我会尝试用:
替换构造函数调用my $soap = SOAP::Lite->new( proxy => 'http://velecloudserver/fortress/dragnetwebservice.asmx');
我最后一次使用SOAP :: Lite时,我写了一个与上面类似的简短程序,我在调试器下运行它。在我执行$ soap-> call()行之前,我偷看了$ soap对象的内容并查看了请求有效负载,以查看XML是否与使用soapUI.org java客户端的某些工作XML相匹配。
我必须阅读POD几次,然后我挖掘了源代码,以了解一些像default_ns()这样的方法如何影响生成的XML。一旦我这样做,这一切都更有意义。
注意:SOAP :: Lite在失败时喜欢die()。将你的电话包裹在eval {}中以供生产使用。