使用xDebug调试SOAP服务


Debugging a SOAP service using xDebug

有没有一种方法可以调试我们发布的SOAP服务,理想情况下将其集成到IDE中,使我能够逐步完成代码。

利用本文的一些灵感,我提出了一个解决方案,允许我从SoapUI调用服务,并在IDE(PhpStorm)中逐步执行代码。

关键是更改生成的WSDL的一部分,特别是<soap:address>节点。这有一个location属性,我将其附加到?XDEBUG_SESSION_START=netbeans-xdebug。显然,netbeans-xdebug需要是您在调试环境中设置的任何IDE密钥。

我通过在呈现WSDL之前捕获它并执行preg_replace()来实现这一点。

$wsdl = preg_replace('|soap:address location="(.*?)"|','soap:address location="$1' . $ide_key . '"', $wsdl );

我已经用Eclipse IDE、Zend Debugger和soapUI进行了调试,但我想这也可以用XDebug。

在Eclipse IDE中选择您的soap服务器端点;调试为"|"PHP Web应用程序";。对我来说,端点是soapserver.php。这将启动默认的web浏览器,并在URL中添加调试参数。因此URL将类似

http://localhost/myproject/soapserver.php?debug_host=127.0.0.1&debug_fastfile=1&start_debug=1&debug_port=10137&use_remote=1&original_url=http%3A%2F%2Flocalhost%2Fmyproject%2Fsoapserver.php&ZRayDisable=1&send_sess_end=1&debug_stop=1&debug_start_session=1&debug_no_cache=1621452020087&debug_session_id=1000

现在将URL从浏览器复制到soapUI的请求中。启动请求,调试器将在soapserver.php的第一行停止php代码的执行。您也可以设置其他断点。

这种方法唯一的缺点是,只有当请求处于活动状态时,调试器才处于活动状态。当超时发生时,调试器也将停止。我曾尝试在soapUI中更改请求超时,但没有成功。可能需要更改php的soapserver的超时,但我不知道该怎么做