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 查看它表明服务器确实返回了 0 的 Content-Length。

我找不到任何关于此的文档......但是有其他协议的文档

我假设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 回答