setPersistence works only for a single instance of service class.
To use multiple instance of services objects, you need to instantiate the classes into objects and use an undocumented SoapServer's method - setObject() to add the service object into the SoapServer object, and handle the service object persistence with $_SESSION instead.
For example:
$ServiceObjects = array()
$ServiceObjects[0] = new ServiceClass1();
$ServiceObjects[1] = new ServiceClass2();
$ServiceObjects[2] = new ServiceClass3();
$_SESSION['ServiceClass1'] = $ServiceObjects[0];
$_SESSION['ServiceClass2'] = $ServiceObjects[1];
$_SESSION['ServiceClass3'] = $ServiceObjects[2];
...
$Servers = array()
for ( $i = 0; $i < count($ServiceObjects); i++)
{
$s = new SoapServer($wsdl);
$s->setObject($ServiceObject[$i]);
$Servers[] = $s;
}
...
$Server[$i]->handle()
...
SoapServer->setPersistence()
(PHP 5 >= 5.1.2)
SoapServer->setPersistence() — Définit le mode persistant de SoapServer
Description
SoapServer
void setPersistence
( int $mode
)
Cette fonction permet de sauvegarder les données entre les requêtes dans une session PHP. Cela ne fonctionne qu'avec un serveur qui exporte les fonctions depuis une classe avec SoapServer->setClass().
Liste de paramètres
- mode
-
Une des constantes SOAP_PERSISTENCE_XXX.
Valeurs de retour
Aucune valeur n'est retournée.
Exemples
Exemple #1 Quelques exemples
<?php
$server->setPersistence(SOAP_PERSISTENCE_SESSION);
$server->setPersistence(SOAP_PERSISTENCE_REQUEST);
?>
Note: La persistance SOAP_PERSISTENCE_SESSION rend persistant seulement l'objet de la classe donnée et non les données statiques de la classe. Vous pouvez utiliser $this->bar au lieu de self::$bar.
SoapServer->setPersistence()
boogiebug at gmail dot com
26-Mar-2008 04:40
26-Mar-2008 04:40
jan at pinna dot nl
26-Jan-2008 12:28
26-Jan-2008 12:28
I found that using both modes (SOAP_PERSISTENCE_SESSION and SOAP_PERSISTENCE_REQUEST) cannot be used simultaniously. Because it didn't work at once, I started experimenting by using different settings and as stated below in the comments, "...also use SOAP_PERSISTENCE_REQUEST to save objects between requests" led me to think it was nessecary to use both modes. Well, it might for others, be but for me it turned out a day of freaking out ;) (trying all kinds of session stuff, etc etc).
Also, if persistence doesn't work, please check if session_start() is called somewhere in the script and try not to call it twice or whatsoever: it won't work...
leon at leonsio dot com
05-Jan-2008 10:10
05-Jan-2008 10:10
attention, if you are using a custon session-handler, the SOAP_PERSISTENCE_SESSION methode will use the files-session handler and not your custom handler. also use SOAP_PERSISTENCE_REQUEST to save objects between requests
jared at ws-db dot com
28-Aug-2005 09:07
28-Aug-2005 09:07
I had some issues getting session persistence (SOAP_PERSISTENCE_SESSION) to work. I finally got it working after setting session.auto_start=0, and then only calling session_start() in the script containing the SoapServer. Maybe this is obvious, but took me a bit to figure it out.
I only tried it with session.use_cookies=1, so if the settings above don't work for you, make sure cookies are enabled, though it may work without the need for cookies.
cperez1000 at hotmail dot com
29-May-2005 05:54
29-May-2005 05:54
Always remember to place the "setPersistence" method before the handle method, otherwise it won't work. It sounds obvious, but it's still a very common mistake, since no errors are shown.
