2016-04-11 5 views
1

Wie kann ich die SOAP-Verbindung auf einfachste Weise wiederverwenden, wenn sie bereits erstellt wurde?Wiederverwendung der PHP-SOAP-Verbindung, wenn sie bereits erstellt wurde?

Die Soap Connection-Funktion könnte in vielen Fällen multiple Zeiten mit einer PHP-Seite geladen werden, so dass es nicht notwendig ist, die Verbindung neu zu erstellen, wenn es erstellt wurde - es muss nur wiederverwendet werden.

(Und manchmal wird es überhaupt nicht ausgeführt, weil es nicht benötigt wird, es wäre also Zeitverschwendung, es am Anfang aller PHP-Seiten aufzurufen. Die Funktion muss nur dort ausgeführt werden, wo es nötig ist verbinden.)

Ich weiß, dass es andere Lösungen für dieses Problem (wenn ich es google), aber ich habe es nicht geschafft, sie zu verstehen. Ich habe viele Dinge ausprobiert, aber sie haben nicht für mich funktioniert. Ich habe sogar versucht, das SOAP-Objekt in einer Sitzung zu speichern, so dass die nächste PHP-Seite, die geladen wurde, die Soap-Verbindung (aus der vorherigen PHP-Last) wiederverwenden könnte, aber es funktionierte nicht mehr.

Die beste Lösung ist, dass die Verbindung für alle PHP-Seiten in einer Browsersitzung gespeichert wird und die nächstbeste Lösung ist, dass sie für die aktuelle PHP-Seitenladung gespeichert wird.

Hier ist mein Code:

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 
     ));   
    } 
    . 
    . 
    . 

AKTUALISIERT Code:

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));   

} 
} 

Und nennen Sie es nach:

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

Antwort

2

vielleicht könnten Sie anstelle einer Funktion eine Klasse versuchen verwenden. Die Verbindung befindet sich in Ihrer Klasseninstanz, während die öffentliche Funktion getClient() für die Anwendung verfügbar ist, um die soapClient-Verbindung zu verwenden.

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

Es wird weiterhin initialisiert. Beim nächsten Aufruf des Soap-Clients wird die Soap-Verbindung nicht erneut verwendet. Warum? Ich habe meinen obigen Code aktualisiert. –

+0

Ich habe es mit statischen Funktionen behoben :-) –

Verwandte Themen