SoapClient PHP 5.6 は IIS 7 (FastCgi) では遅いが、CLI からは問題ない

SoapClient PHP 5.6 は IIS 7 (FastCgi) では遅いが、CLI からは問題ない

Web サービスに接続する PHP スクリプトがあります。

同じスクリプトを CLI 経由で実行すると、正常に実行されます (最初の接続は 1 秒で、サービスへの呼び出しは非常に高速です)。

IIS FastCGI サーバー経由で PHP でページを実行すると、Web サービス メソッドの最初の呼び出しで約 5 秒の遅延が発生します。

Web サービス メソッドへの 2 回目の呼び出しは通常どおり高速です。

次にどこをチェックすればよいかアドバイスをいただければ幸いです。さらにデバッグする方法がわかりません。

私はWindows Server 2008 R2 Standard内の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 を実行) では発生しないのかはわかりません。

関連情報