我在网页上有以下PHP代码:
$wsdl_url = "someURL?wsdl";
try {
$client = new SoapClient($wsdl_url, array('login' => 'mylogin','password' => 'mypassword'));
$client->myWebMethod(); // <-- problem call
} catch (Exception $e) {
echo "none";
}
这是对Web服务的基本调用。问题是当行$client->myWebMethod()
上出现错误时,不会打印echo "none"
。实际上,catch
块中没有任何内容运行。因此,我不认为这个例外被抓住了。
网页上显示致命错误。
问题:有关为何发生这种情况的任何想法?我期望使用此代码捕获和处理所有异常。但我得到的是页面上显示致命错误。也许Web服务的处理方式不同?
编辑:错误是它缺少一堆必需的参数。如果我添加参数,调用工作正常。我故意省略参数来获取错误,所以我知道如何处理它。
错误类似于:致命错误:SOAP-ERROR:对象没有'myparameter1'
提前致谢。
答案 0 :(得分:2)
今天早上我为Drupal运行一个需要外部SOAP Web服务的自定义模块时遇到了同样的问题。说实话,我不太确定我是如何解决这个问题的。
事实证明,完全是关于清除与相应WSDL有关的Web服务器缓存。在 tmp / 文件夹中,您会找到名为 wsdl-yourservice-etc 的各种文件。删除它们应该没问题。如果没有,问题在于代码,更具体地说,是传递给WSDL的参数的顺序和语法。
我希望我能帮忙。
答案 1 :(得分:1)
不幸的是,这不是一个可捕获的错误。
但是,您可以在尝试实例化之前检查soap扩展是否已加载,方法是调用get_loaded_extensions:
if (in_array('soap', get_loaded_extensions())) {
// it's loaded!
}