$client = new SoapClient('http://example.com/soap/wsdl'); try { $result = $client->myMethod(); } catch (Exception $e) { echo $e->getMessage(); }
有时(十分之一),有一个例外:
SoapFault exception: [HTTP] Could not connect to host
我的尝试
1)我寻找解决方案,I read这个问题可以由wsdl缓存引起,我在PHP.ini中禁用它:
soap.wsdl_cache_enabled = 0 soap.wsdl_cache_ttl = 0
引起少数例外
2)我试图添加到主机的Windows(他们在Windows上)Windows / system32 / drivers / etc / hosts中的dns的分辨率:
160.XX.XXX.XX example.com
引起少数例外
3)我也试图禁用“Windows防火墙”,
引起少数例外
4)我也试图增加PHP.ini中的default_socket_timeout
default_socket_timeout = 90
什么也没有变
问题
服务器肥皂似乎没有问题.它也是从其他网站也没有问题.还有什么我能做的吗
我的设置
PHP 5.6
Apache 2.4
Windows Server 2012
UPDATE
经过多次测试,我认为问题是在网络中,肥皂服务器背后是反向代理,问题出现在代理中.
广告1)WSDL是否有所改变?如果没有,请打开WSDL缓存.您不需要连接到服务器来获取WSDL文件.
你提到的输出是真的在echo $e-> getMessage();?您可以在catch()块中添加一些调试代码,例如:
>检查是否可以以其他方式连接到服务器(例如file_get_contents($soap_url))
>如果没有,请检查您遇到什么样的错误
>打印时间并检查SOAP服务器上的错误日志
> 403对于服务器上的问题,禁止或类似的错误点
> a无法将错误点连接到网络问题(不仅仅是机会更高)
>你可以尝试把它放在一个循环中(某些东西沿着($i = 0; $i< = 5; $i){/ * ... * / sleep(1); continue;})看看第二次尝试会使它工作 总而言之,“有时错误”很难调试,因此您应该尝试使其可重现(这将指向问题),或者您需要尽可能多地记录和输出数据,以便您可以看到问题是在发生的时候.