4

Perl を使用して、できれば を使用して、やや複雑な SOAP クエリを作成する必要がありますSOAP::Lite。サービスがアクティブであることはわかっており、相手側からエラーを返すことに成功しています。作成する必要がある SOAP クエリは次のとおりです。

<?xml version="1.0" encoding="utf-8"?>
<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>
    <GetCategories xmlns="http://webservices.uship.com">
        <token>string</token>
    </GetCategories>
</soap:Body>
</soap:Envelope>

Googleでこれを調査しましたが、役に立ちませんでした。

更新:これまでに使用されたコードは

use SOAP::Lite; 
print SOAP::Lite
 -> uri('webservices.uship.com/uShipsvc.asmx?WSDL';)
 -> proxy('http:/webservices.uship.com')
 -> GetCategories('myToken')
 -> result;

これは戻ります

500 不正なホスト名、500 Can't connect to :80 (不正なホスト名 '')、soap2.pl 行 2

4

4 に答える 4

3

SOAP :: Liteのスタートガイドから、コードは次のようになります。

#!perl -w
use SOAP::Lite;
print SOAP::Lite                                            
  uri('http://www.soaplite.com/Temperatures')
  proxy('http://webservices.uship.com')
  GetCategories('string')
  result;

返されたオブジェクトのURIをプラグインしますuri()

于 2011-04-12T16:42:08.537 に答える
1

私が話していたサーバーが .NET だったので、SOAP 呼び出しを行う際に問題がありました。明らかに SOAP::Lite との通信に問題があります

サーバーが .NET でない場合でも、これは呼び出しを行う別の方法です (これは私にとってはうまくいきます)。

# proxy and uri strings should NOT have trialing slashes
my $_uri = 'http://youruri.com/whatever';
my $_proxy = 'http://yourproxy.com/something.asmx';
my $methodName = 'GetCategories';
my @params = (
        SOAP::Data->name( 'token'=>'string' ),
);

my $handle = SOAP::Lite
    ->uri( $_uri )
    ->proxy( $_proxy , timeout => 30, keep_alive => 1 )
    ->on_action( sub{ $_uri . "/" . $_[1] } );
my $method = SOAP::Data
    ->name( $methodName )
    ->attr( {xmlns => $_uri . "/"} );
my $rv = $handle->call( $method=>@params );
if( $rv->fault() ){
    print "SOAP Error ($methodName) :: " . $handle->transport()->status() . "\n\t" . $rv->faultcode() . ": " . $rv->faultstring();
} else {
    print $rv->result();
}

また、回答の1つに対するあなたのコメントを見てください

codeuse SOAP::Lite; print SOAP::Lite -> uri('webservices.uship.com/uShipsvc.asmx?WSDL';) -> proxy('http://webservices.uship.com') -> GetCategories('myToken') -> 結果;

uri と proxy が逆になっている可能性があります。つまり、プロキシは .asmx (「?WSDL」なし) である必要があります。?WSDL が必要な場合は、uri+proxy を使用する方法とはまったく異なる接続方法です。参照: http://guide.soaplite.com/#access%20with%20service%20description%20%28wsdl%29

于 2011-07-28T14:33:35.553 に答える
1

http:/webservices.uship.comI getで URI を修正する必要があります500 No Host option provided at test-soap.pl line 7。これを次のように変更します。

use SOAP::Lite; 
print SOAP::Lite
 -> uri('http://webservices.uship.com/uShipsvc.asmx?WSDL')
 -> proxy('http://webservices.uship.com')
 -> GetCategories('myToken')
 -> result;
于 2012-12-19T22:05:03.817 に答える
0

SOAP::TraceSOAPを使用して呼び出しの実行をトレースすることを検討してください

この use ステートメントを lib/script に含めることができます。

use SOAP::Lite +trace => [qw/ debug method fault /];

これは、呼び出しのデバッグに役立ちますSOAP

于 2012-04-24T23:22:23.300 に答える