我有一個連接到網路服務的 php 腳本。
當透過 CLI 運行相同的腳本時,它運行良好(一秒鐘初始連接並非常快速地調用服務)。
當透過 IIS FastCGI 伺服器在 PHP 中執行頁面時,第一次呼叫 Web 服務方法會出現大約 5 秒的延遲。
對 webservice 方法的第二次呼叫與平常一樣快。
任何有關下一步檢查地點的建議將不勝感激。我不知道如何進一步調試。
我在 Windows Server 2008 R2 Standard 的 IIS 上使用 PHP 5.6.13
這是我用來單獨測試這個問題的腳本(網路服務名稱匿名,因為它不可公開存取)
<?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 網路伺服器上執行相同的腳本,則不會發生這種延遲
答案1
這個問題與 SOAP 無關,因為我剛剛在 file_get_contents 開啟 url 時遇到了相同的問題。某處的連線似乎有延遲。我不知道為什麼會在 IIS 中發生這種情況,但不會在命令列中發生(在 Windows 上運行 git bash)