У меня есть сценарий PHP, который соединяется с веб-сервисом.
При запущении того же скрипта через CLI это хорошо работает (начальное соединение секунда, и призывает к сервису очень быстрый).
При выполнении страницы в PHP через сервер IIS FastCGI требуется задержка приблизительно 5 секунд на первом вызове к методу веб-сервиса.
Второй вызов к методу веб-сервиса быстр как нормальный.
Любой совет относительно того, где проверить затем, ценился бы. Я в замешательстве того, как отладить далее.
Я использую PHP 5.6.13 на IIS В рамках Стандарта Windows Server 2008 R2
Это - сценарий, который я использую для тестирования этой проблемы в изоляции (имя веб-сервиса, анонимизированное, поскольку это не публично доступно),
<?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]);
ouput показывает задержку 4/5 секунд на выводе "call1".
эта задержка не происходит, если я запускаю идентичный скрипт через CLI, ни на нашем старом веб-сервере, который был php 5.4
Эта проблема не связана с SOAP, так как я только что столкнулся с той же проблемой с file_get_contents при открытии URL-адреса. Кажется, где-то задержка в соединении. Понятия не имею, почему это происходит в IIS, а не в командной строке (запуск git bash в Windows)