SoapClient PHP 5.6 在 IIS 7 (FastCgi) 中運行緩慢,在 CLI 中運行良好

SoapClient PHP 5.6 在 IIS 7 (FastCgi) 中運行緩慢,在 CLI 中運行良好

我有一個連接到網路服務的 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)

相關內容