我使用SOAP :: Lite与“SOAP”-Service-WSDL(ASMX resp)进行通信。 此服务需要一组参数,如下所示:
<scriptParameters>
<string>string</string>
<string2>string2</string2>
</scriptParameters>
在Perl中,我使用以下代码:
my @args;
my @params;
foreach (keys %{$self->{args}}) {
push(@params, SOAP::Data->name($_ => $self->{args}->{$_})->type(""));
}
push(@data, SOAP::Data->name("scriptParameters" => SOAP::Data->value(\@params)->type(""))->type(""));
但这会创建以下XML:
<scriptParameters soapenc:arrayType="xsd:anyType[11]" xsi:type="namesp20">
<job_id xsi:type="xsd:int">18381</job_id>
<dump xsi:type="xsd:int">0</dump>
</scriptParameters
请注意scriptParameters-Element中的 soapenc:arrayType ... -stuff。
现在的问题是,ASMX-Service无法识别scriptParameters数组(我想因为soapenc-stuff(不幸的是这不是可调试的)。有没有人知道我怎么能摆脱它其他数据?
谢谢:)
答案 0 :(得分:0)
在不知道实际服务且无法尝试各种选项的情况下,这有点困难。但根据我的经验,使用“soapenc:arrayType”是SOAP :: Lite的症状,认为该服务是RPC /编码的SOAP服务,而不是document / literal或RPC / literal。因此,请检查您使用哪种方法来创建服务代理,'$ soap-&gt;服务($ WSDL)'方法假设为RPC / encoded,但'$ soap-&gt; proxy()'方法允许更多控制,一些额外的复杂性。
说服SOAP :: Lite生成正确的XML可能有点棘手。有关如何使用SOAP :: Lite构建特定数据结构的一些提示,请查看以下站点:
从后面开始,EB-eye网络服务的示例代码(ebeye_soaplite.pl)可能是最有用的,因为它使用了很多列表/数组。
根据您与SOAP :: Lite的关联程度,您可能希望了解备选方案。我发现XML :: Compile :: SOAP比使用复杂类型的文档/文字SOAP服务更容易使用。