PHP SoapClient似乎卡在连接错误中

时间:2019-03-13 09:23:20

标签: php laravel soap-client

PHP SoapClient类遇到一个有趣的问题。我在后台运行Laravel队列管理器(PHP脚本不断运行),有时它使用SoapClient处理任务。一旦出现连接错误(SoapClient说无法连接到主机),它似乎就停留在此状态,并且以后的每个soap请求都将失败,并显示相同的错误消息。一旦我重新启动队列工作器(= php脚本结束并且开始了新的脚本),它就会再次开始工作。我还确保这不是网络问题,可以同时从另一个脚本发送相同的请求。

我不知道SoapClient在后台如何工作(如果它缓存了连接等)。有什么想法解决它而不一直保持重启状态吗?

谢谢

1 个答案:

答案 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定义的缓存,您可以使用相应的选项将其停用。