Как я могу самым простым образом повторно использовать SOAP-соединение, если оно уже создано?Повторное использование PHP SOAP-соединения, если оно уже создано?
Функция подключения мыла во многих случаях может запускать многопользовательские времена при загрузке одной страницы на PHP, поэтому нет необходимости заново создавать соединение, если оно было создано - его просто нужно повторно использовать.
(И иногда его даже не запускают, потому что он не нужен, поэтому было бы пустой тратой времени, называя его в начале всей страницы PHP. Функция должна быть выполнена только там, где есть необходимость connect.)
Я знаю, что есть другие решения этой проблемы (когда я это делаю), но я не смог их понять. Я много пробовал, но они не работали для меня. Я даже попытался сохранить объект SOAP в сеансе, чтобы следующая загруженная страница PHP могла повторно использовать мыльное соединение (из предыдущей загрузки PHP), но оно не работало истребителем.
Лучшее решение заключается в том, что соединение запоминается для загрузки всех страниц PHP в сеансе браузера, а следующим лучшим решением является то, что он запоминается для текущей загрузки страницы PHP.
Вот мой код:
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
));
}
.
.
.
ОБНОВЛЕНО КОД:
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));
}
}
И называть его:
$result = EcoAPI::getClient()->Account_FindByNumber(array('number' => intval($accountID)));
Он продолжает инициализацию. Это не повторное использование мыльного соединения при следующем вызове клиента мыла. Зачем? Я обновил свой код выше. –
Я исправил это, сделав статические функции :-) –