2016-04-11 26 views
1

Önceden oluşturulmuşsa, SOAP bağlantısını en kolay şekilde nasıl kullanabilirim?Önceden oluşturulmuşsa PHP SOAP bağlantısını yeniden kullanın?

Sabun bağlantı fonksiyonu, birçok durumda bir PHP sayfa yükünün birden çok kez çalıştırılmasını sağlayabilir, böylece oluşturulmuşsa bağlantıyı yeniden oluşturmaya gerek yoktur - sadece yeniden kullanılması gerekir.

(Ve bazen ihtiyaç duyulmadığı için hiç çalışmaz, bu yüzden tüm PHP sayfalarının başında çağırmak zaman kaybı olur. Bu işlev sadece çalıştırılması gereken bir işlevdir. bağlayın.)

Bu sorun için başka çözümler olduğunu biliyorum (bunu google'dayken) ama onları anlamadım. Çok fazla şey denedim ama benim için çalışmadılar. Hatta bir oturumda SOAP nesnesini depolamayı denedim ki, yüklenen bir sonraki PHP sayfası sabun bağlantısını yeniden kullanabiliyordu (önceki PHP yükünden) ama daha işe yaramazdı.

En iyi çözüm, bir tarayıcı oturumundaki tüm PHP sayfaları yükleri için bağlantının hatırlanması ve bir sonraki en iyi çözümün mevcut PHP sayfa yükü için hatırlanmasıdır.

protected static function Economic_API() { 

    static $client; 

    $settingsOld = Settings::GetOld();  

    try {    
     $client = new SoapClient("https://api.e-conomic.com/secure/api1/EconomicWebservice.asmx?WSDL", array("trace" => 1, "exceptions" => 1)); 
     $client->ConnectWithToken(array(
      'token' => $settingsOld->economic_token_secret, 
      'appToken' => $settingsOld->economic_token_app 
     ));   
    } 
    . 
    . 
    . 

GÜNCELLEME KODU::

İşte benim kodudur

class EcoAPI { 

static $client; 

static public function getClient() { 

    if (empty(self::$client)) { 
     self::initClient(); 
    } 

    return self::$client; 
} 

static private function initClient() { 

    $settingsOld = Settings::GetOld(); 
    self::$client = new SoapClient("https://api.e-conomic.com/secure/api1/EconomicWebservice.asmx?WSDL", array("trace" => 1, "exceptions" => 1)); 
    self::$client->ConnectWithToken(array('token' => $settingsOld->economic_token_secret, 'appToken' => $settingsOld->economic_token_app));   

} 
} 

Ve tarafından diyoruz: belki bir işlevi yerine bir sınıf kullanarak deneyebilirsiniz

$result = EcoAPI::getClient()->Account_FindByNumber(array('number' => intval($accountID))); 

cevap

2

. Bağlantı, sınıf örneğinizde yaşarken, soapClient bağlantısını kullanmak için uygulama için public function getClient() kullanılabilir.

class Economic_API { 

    private $client; 
    private $token; 
    private $appToken; 

    public function __construct($token, $appToken){ 
     $this->token = $token; 
     $this->appToken = $appToken; 
    } 

    private function initClient() { 
     $this->client = new SoapClient("https://api.e-conomic.com/secure/api1/EconomicWebservice.asmx?WSDL", array("trace" => 1, "exceptions" => 1)); 
     $this->client->ConnectWithToken(array(
      'token' => $settingsOld->economic_token_secret, 
      'appToken' => $settingsOld->economic_token_app 
     ));   
    } 

    /** 
     * @returns SoapClient 
     */ 
    public function getClient() { 
     if($this->client === null) { 
      $this->initClient(); 
     } 
     return $this->client; 
    }   
} 
$token = '123'; 
$appToken = "abc" 
$economicApi = new Economic_API($token, $appToken); 

$economicApi->getClient()->YourSoapFunction(); 
+0

Başlatma işlemini sürdürür. Sabun bağlantısını bir sonraki sabunlu müşteri çağrısında tekrar kullanmaz. Niye ya? Yukarıdaki kodumu güncelledim. –

+0

Statik işlevler yaparak sabitledim :-) –