2

提供されている SOAP Web サービスを介して PHP スクリプトをMoodle 2.0 に接続するのに苦労しています。SOAP についてあまり知らなかったので、単純に接続してそこから移動しようと考えました。なのに、全然繋がらない…。

$soap=new SoapClient(
    'http://mymoodleserver/webservice/xmlrpc/server.php?wstoken=asdfasdfasdfasdfasdf',
    array(
        'trace'=>1,
        'exceptions'=>true,
        'cache_wsdl'=>WSDL_CACHE_NONE
    )
);

これは以下を返します:

致命的なエラー: キャッチされない SoapFault 例外: [WSDL] SOAP-ERROR: WSDL の解析: 読み込めませんでした...

この URL に直接アクセスしても、データは返されません。Fiddler で見ると、サーバーが実際に Content-Length 0 を返していることがわかります。

私が見つけることができるこれに関するドキュメントはありません...ただし、他のプロトコルのドキュメントがあります。

SoapClientは、使用可能な機能を定義するために何らかの WSDL を期待していると想定しています。これらの関数とパラメーターのリストがあります(公式ドキュメントページのおかげではありません)。SoapClient に WSDL を気にせずに続行するように指示するにはどうすればよいですか?

Moodle サーバーの PHP エラー ログでエラーを確認しましたが、問題はありませんでした。

4

2 に答える 2

1

非 wsdl モードを使用する方法は、それを uri に追加することです

$client = new SoapClient(null, array('location' => "http://localhost/soap.php",
                                     'uri'      => "http://test-uri/"));

もちろん、trace を使用してから、getlastrequest と getlastresponse を探します。

$result = $client->SomeFunction();
echo "REQUEST:\n" . $client->__getLastRequest() . "\n";

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

簡単にデバッグするには、xmlspy を使用します。

于 2011-04-24T23:35:08.003 に答える
0

キーはエラーにあるので、Moodle のドキュメントを調べ始めましたが、WSDL はありません。

SoapClientドキュメントと Moodleのドキュメントを確認してください。Moodle はWSDLを提供していないため、非 WSDL モードで SoapClient を使用する必要があることがわかります。

于 2011-04-06T21:32:35.233 に答える