SoapClient PHP 5.6 在 IIS 7(FastCgi)中运行缓慢,但从 CLI 中运行良好

SoapClient PHP 5.6 在 IIS 7(FastCgi)中运行缓慢,但从 CLI 中运行良好

我有一个连接到 web 服务的 php 脚本。

通过 CLI 运行相同的脚本时,它运行良好(初始连接一秒钟并非常快速地调用服务)。

通过 IIS FastCGI 服务器运行 PHP 中的页面时,第一次调用 webservice 方法大约需要 5 秒的延迟。

第二次调用webservice方法很快,正常。

如果能提供下一步检查位置的建议,我将不胜感激。我不知道如何进一步调试。

我在 Windows Server 2008 R2 标准版中的 IIS 上使用 PHP 5.6.13

这是我用来单独测试此问题的脚本(由于不可公开访问,因此 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 运行相同的脚本,则不会发生这种延迟,在我们旧的 php 5.4 的 Web 服务器上也不会发生这种延迟

答案1

这个问题与 SOAP 无关,因为我刚刚遇到了 file_get_contents 打开 URL 的相同问题。似乎某个地方的连接有延迟。我不知道为什么这种情况会发生在 IIS 中,而不会发生在命令行上(在 Windows 上运行 git bash)

相关内容