PHP SoapClient类遇到一个有趣的问题。我在后台运行Laravel队列管理器(PHP脚本不断运行),有时它使用SoapClient处理任务。一旦出现连接错误(SoapClient说无法连接到主机),它似乎就停留在此状态,并且以后的每个soap请求都将失败,并显示相同的错误消息。一旦我重新启动队列工作器(= php脚本结束并且开始了新的脚本),它就会再次开始工作。我还确保这不是网络问题,可以同时从另一个脚本发送相同的请求。
我不知道SoapClient在后台如何工作(如果它缓存了连接等)。有什么想法解决它而不一直保持重启状态吗?
谢谢
答案 0 :(得分:1)
可以通过选项启动PHP SoapClient类。请看一下示例。
try {
$client = new \SoapClient($wsdl, [
'cache_wsdl' => WSDL_CACHE_NONE, // caches the wsdl data (not in this case)
'exceptions' => true, // throw a full exception, when an error occurs
'trace' => true, // backtracing of thrown soap faults and enables last requests and responses
]);
} catch (\SoapFault $fault) {
// error handling
var_dump($fault->getMessage());
// if client was initiated have a look at the last requests and responses
if ($client) {
var_dump($client->__getLastRequest());
var_dump($client->__getLastResponse());
}
}
您必须设置一些选项来获取有关发生的错误的详细信息。由于我们不知道客户的初始化情况,因此无法确切地说出您的情况。可能是任何东西。一个不可访问的wsdl地址。格式错误的请求。服务器端错误。
使用正确的参数初始化soap客户端时,您所看到的全部。没有选择,它根本不会影响soap客户端的缓存行为。唯一的缓存是wsdl定义的缓存,您可以使用相应的选项将其停用。