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