我正在構建基於perl的SOAP請求,以發送到在IIS服務器上運行的Web服務。 Web服務接口定義的參數的方法爲:SOAP :: Lite和dateTime值
<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:日期時間」,但我ahve還試圖「S:日期時間」和「日期時間」。一切都以相同的錯誤結束。
您是否嘗試過轉動追蹤以查看實際發送的內容?使用SOAP :: Lite + trace =>'all'; – KeepCalmAndCarryOn
我沒有嘗試添加追蹤,但我現在有。值都看起來正確。他們都是這種形式: 2013-08-22T15:54:28 這正是我在第一個地方輸入的內容。 –