0

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」も試しました。すべてが同じエラーで終了します。

4

2 に答える 2

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 が設定されています。

消費しようとしているサービスを投稿できますか?

于 2013-09-29T21:36:26.553 に答える