我有一个PHP脚本,连接到一个Web服务。
当通过CLI运行相同的脚本时,它运行正常(初始连接一秒钟,并非常快地调用服务)。
当通过IIS FastCGI服务器在PHP中运行页面时,首次调用web服务方法需要大约5秒钟的时间。
第二次调用webservice方法是正常的。
任何有关下一步检查的build议将不胜感激。 我不知道如何进一步debugging。
我在Windows Server 2008 R2 Standard的IIS上使用PHP 5.6.13
这是我用来孤立地testing这个问题的脚本(Web服务名称匿名,因为它不公开访问)
<?php define('SOAP_URL', 'https://sandbox.webservice.com/Service.asmx?WSDL'); define('SOAP_NAMESPACE', 'http://service.webservice.com/'); class WebService { public $client; function __construct($SoapURL = SOAP_URL, $SoapNS = SOAP_NAMESPACE) { $soapHeader = array('User' => '...', 'SecretKey'=> '...'); $this->client = new SoapClient($SoapURL, ['trace'=>true]); $header = new SOAPHeader($SoapNS, 'ClientAuth', $soapHeader); $this->client->__setSoapHeaders($header); } } var_dump(['start', $time = time()]); $service = new WebService(); var_dump(['init', time() - $time]); $params = [ 'option' => 1000, ... 'loads_of_options_skipped' => 1, ]; $service->client->GetInfo(['for_id'=>34]); var_dump(['call1', time() - $time]); $service->client->GetInfo(['for_id'=>34]); var_dump(['call2', time() - $time]);
输出在“call1”的输出上显示4/5秒的延迟。
这个延迟不会发生,如果我通过CLI运行相同的脚本,也不会发生在我们的旧的Web服务器是PHP 5.4
这个问题与SOAP无关,因为我刚刚遇到了file_get_contents打开url的相同问题。 某处连接似乎有延迟。 我不知道为什么会发生在IIS中,而不是在命令行(在Windows上运行git bash)