时间:2011-01-06 17:29:43

标签: web-services perl soap sourcegear-fortress

1 个答案:

答案 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 {}中以供生产使用。