SOAP :: Lite和dateTime值

时间:2013-09-27 21:06:08

标签: web-services perl datetime soap

我正在构建一个基于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”。一切都以同样的错误结束。

2 个答案:

答案 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)

叹了口气,我的坏。我错误地输入了与日期相关的参数名称。一切正常。