0

これらの要件を備えた SOAP クライアントを生成するツールがあるかどうか教えてください。

  1. せっけん 1.2
  2. クライアントは 3 つの異なるサービス (つまり 3 つの wsdl) に基づいています。
  3. これらのサービスには共有タイプがあります

私は次のことを知りました:

http://php.net/manual/en/class.soapclient.php

http://www.php.net/manual/en/soapclient.soapclient.php

調べてもわからないのは特に最後の2点です。さまざまなソースから作成する方法や特定のサービスを呼び出す方法がわからないため、助けていただければ幸いです。

4

2 に答える 2

1

私はあなたが何をしたいのかを理解しようとしています。

  • 最初: 1 つの WSDL === 1 つのサービス === 1 つの SoapClient。Soap クライアント レベルで 2 つの WSDL の場所を混在させることはできませんが、アプリケーションによっては、各サービスの結果をより高いレベルで接続する場合があります。

    したがって、3 つの WSDL がある場合は、使用する 3 つの SoapClient クラスをインスタンス化する必要があります。これは、既存の Web サーバーにリクエストを送信できる単一の汎用 HTTP クライアントとは異なります。

  • 2 番目: クラスマップを SoapClient に提供しない限り、リクエストの戻り値は stdClass と配列の混合のみです。WSDL で型が定義されている場合がありますが、定義しない限り、PHP はそれらを何にもマップしません。

    WSDL の ComplexType 定義と一致する、独自に定義したクラスでクラスマップを使用することをお勧めします。Google で調べれば、この仕事をしてくれるコード ジェネレーターがいくつかありますが、SOAP の標準は複雑であり、WSDL の定義も複雑であるため、手動で作業することになるかもしれません。

    データ構造が小さい場合は、クラスマップがなくても完全に生きることができます。

  • 3 番目: 3 つの WSDL がデータ型を共有している場合、これは PHP にはまったく影響しません。classmap がないと、応答は stdClass と Array になり、Request パラメータは同じになる可能性があるため、この情報から何のメリットも得られません。

    一方、クラスマップの方向に進むと、共有型が生成される同じクラスにつながると予想されるため、PHP レベルでは、サービス A の ComplexType がサービス A の ComplexType と同一であることがわかります。サービスB。

于 2012-10-03T09:59:08.947 に答える
1

2〜3個のWebサービスを実行していないため、ソリューションをテストできませんが、このソリューションは機能すると思います(正しく理解していれば)。もしよろしければ、試して教えてください。

<?php
class wstest {
    function __construct($url) {
        $this->soapUrl = $url;
        try{
            $this->client = new SoapClient($this->soapUrl,array('login' => 'wsuser', 'password' => "some_password", "connection_timeout"=>30,'trace'=>true,'keep_alive'=>false,'features' => SOAP_SINGLE_ELEMENT_ARRAYS));
        } catch (Exception $e) {            
            echo $e->getMessage();
        }
    }
};

$con = new wstest("http://firstwebservice.com/?wsdl");

$con2 = new wstest("http://secondwebservice.com/?wsdl");

$con3 = new wstest("http://thirdwebservice.com/?wsdl");
?>
于 2012-10-03T10:00:28.670 に答える