我正在构建一个基于perl的SOAP请求,以发送到IIS服务器上运行的Web服务。 Web服务接口将方法的参数定义为:
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<MyMethodName xmlns="http://third.party.Web.Service/">
<thing1>string</thing1>
<StartTime>dateTime</StartTime>
<EndTime>dateTime</EndTime>
</MyMethodName>
</soap:Body>
</soap:Envelope>
WSDL定义:
<s:element name="MyMethodName ">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="thing1" type="s:string"/>
<s:element minOccurs="1" maxOccurs="1" name="StartDate" type="s:dateTime"/>
<s:element minOccurs="1" maxOccurs="1" name="EndDate" type="s:dateTime"/>
</s:sequence>
</s:complexType>
</s:element>
格式化日期字符串并不困难。我从数据库中提取值,我很容易看到dateTime definition。制作这种格式是微不足道的。但是,我总是得到错误:
SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
我的搜索显示了确保日期字符串格式正确的帖子。我手工编写了字符串,并依赖于两个与SOAP :: Lite相关的辅助模块来处理dateTime格式。
我当前代码的相关位包括:
use SOAP::Lite;
use SOAP::DateTime qw(ConvertDate);
$soapResult = $soap->MyMethodName(
SOAP::Data->type('string')->name('thing1')->value("my thing"),
SOAP::Data->type('xsd:dateTime')->name('StartDate')->value(ConvertDate($row->{Start})),
SOAP::Data->type('xsd:dateTime')->name('EndDate')->value(ConvertDate($row->{End})));
我目前正在尝试“xsd:dateTime”的“类型”,但我也试过“s:dateTime”和“dateTime”。一切都以同样的错误结束。
答案 0 :(得分:1)
之前我遇到过这个问题,最后我手工构建了SOAP请求。可能使用其他地方的工作要求。
或者我看到这个http://msdn.microsoft.com/en-us/library/ms995764.aspx详细说明了从perl
连接到基于.NET的服务这可能是相关位
use SOAP::Lite;
my $soap = SOAP::Lite
-> uri('http://third.party.Web.Service/')
-> on_action( sub { join '/', 'http://third.party.Web.Service', $_[1] } )
-> proxy('ttp://third.party.Web.Service/<YOUR SERVICE HERE>.asmx');
my $method = SOAP::Data->name('MyMethodName')
->attr({xmlns => 'http://www.alfredbr.com/'});
my @params = ( SOAP::Data->name('s:string' => 'my thing'),
SOAP::Data->name('s:startTime' => $startTime),
SOAP::Data->name('s:endTime' => $endTime) );
print $soap->call($method => @params)->result;
你的参数是s:string,s:startTime和s:endTime以及$ startTime和$ endTime已被设置。
你可以发布你想要消费的服务吗?
答案 1 :(得分:0)