我正在构建一个基于 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 定义。制作这种格式是微不足道的。但是,我总是得到错误:
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”。一切都以同样的错误结束。