2

SOAP サーバーに問題があり、数日のうちに頭がおかしくなりました。私は、単純な SOAP-Server PHP スクリプトにも問い合わせる非常に単純な SOAP-Client PHP スクリプトを持っています。

デバッグ サーバーにこれらのスクリプトの正確なコピーがあり、完全に動作します (これは単なる hello World 関数です)。「Procedure 'ns1:testHello' not present」エラーが発生し続けます (testHello は関数名です)。

production-client が機能していることはわかっています。プロダクション サーバーから呼び出して WSDL を開発すると、完全に機能するからです。SOAPサーバーと何らかの形で相関していると思いますが、正しく機能しているかどうか、何が問題なのかを正確に知るにはどうすればよいですか?

infophp() ダンプを見ると、SOAP サーバーとクライアントの両方が有効になっていることがわかります

Soap Client     enabled
Soap Server     enabled 

Directive   Local Value Master Value
soap.wsdl_cache 1   1
soap.wsdl_cache_dir /tmp    /tmp
soap.wsdl_cache_enabled 0   1
soap.wsdl_cache_limit   5   5
soap.wsdl_cache_ttl 0   86400

SOAP_1_1 と SOAP_1_2 の両方のバージョンを強制しようとしましたが、変更はありません。あらゆる種類のキャッシュを無効にしようとしましたが、変更もありません。「ns:X function not present」は通常、WSDL の設定ミスが原因であると読みましたが、それが正確なコピーである場合、どのように間違っている可能性がありますか (targetNamespace、xmlns:tns、soap:address url が実稼働サーバーを指している場合を除く)。

これは何らかの形で Web サーバーの構成設定に関連していると思い始めています。何か案は?どのような検査ができますか?

よろしくお願いします。

私のサーバーコード:

    ini_set("display_errors", "off");
    ini_set("soap.wsdl_cache_enabled", 0);
    ini_set('soap.wsdl_cache_ttl',0);

    $wsdl_url="http://SITE_URL/test.wsdl";


    function testHello($functionName){
        $return = "Hello, ".$functionName;
      return $return;
    } 

    $server= new SoapServer($wsdl_url, array('cache_wsdl' => WSDL_CACHE_NONE));
    $server->addFunction("testHello");
    $server->handle();

私のクライアントコード

ini_set("soap.wsdl_cache_enabled", 0);
ini_set('soap.wsdl_cache_ttl',0);
ini_set("display_errors", "on");

$wsdl_url="http://SITE_URL/test.wsdl";

$client=new SoapClient($wsdl_url , array('cache_wsdl' => WSDL_CACHE_NONE));

try{
  $t = $client-> testHello("Test");
  var_dump($t);
} catch(SoapFault $e){
  var_dump($e);
}

私の WSDL ファイル

<?xml version="1.0" encoding="UTF-8" ?>

<definitions name="TLN"
             targetNamespace="http://SITE_URL/test.wsdl"
             xmlns:tns="http://SITE_URL/test.wsdl"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
             xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
             xmlns="http://schemas.xmlsoap.org/wsdl/">

     <message name="testHelloRequest">
        <part name="functionName" type="xsd:string"/>
    </message>

    <message name="testHelloResponse">
        <part name="return" type="xsd:string"/>
    </message>

    <portType name="testHelloPortType">
        <operation name="testHello">
            <input message="tns:testHelloRequest" />
            <output message="tns:testHelloResponse" />
        </operation>
    </portType>

   <binding name="testHelloBinding" type="tns:testHelloPortType">
        <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
        <operation name="testHello">
            <soap:operation soapAction="" />

            <input>
                <soap:body use="encoded" namespace="" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
            </input>
            <output>
                <soap:body use="encoded" namespace="" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
            </output>
        </operation>
    </binding>

    <documentation>testHello</documentation>

    <service name="testHelloService">
        <port name="testHelloPort" binding="testHelloBinding">
            <soap:address location="http://SITE_URL/server.php" />
        </port>
    </service>       


</definitions>
4

0 に答える 0