IIS サーバーで実行されている Web サービスに送信するための perl ベースの SOAP 要求を作成しています。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.
私の検索では、日付文字列が正しくフォーマットされていることを確認するように言う投稿が表示されます。文字列を手作業でコーディングし、2 つの 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」も試しました。すべてが同じエラーで終了します。