15 fév 2008

Connexion persistente du client SOAP PHP à travers une session

Category: UncategorizedRenaud @ 21h35

Pour mon boulot, j’ai besoin de mettre un objet en session qui contient lui-même un objet SoapClient. le problème, c’est que sur la page suivante, la connexion au serveur SOAP est coupée. Il faut reconnecter le client à la main… c’est un peu casse pied.

Du coup, j’ai étendu la classe SoapClient pour que ca se reconnecte automatiquement et ca donne:

class SoapClientSessionnable extends SoapClient {
    private $wsdl;
    private $options;
 
    public function __construct($wsdl, $options = array()) {
        $this->wsdl     = $wsdl;
        $this->options  = $options;
 
        parent::__construct($wsdl, $options);
    }
 
    public function __wakeup() {
        $this->__construct($this->wsdl, $this->options);
    }
}

Bon, c’est un peu crade de rappeler le constructeur, mais je n’ai trouvé aucune méthode qui connecte le client SOAP… et puis ca a le mérite de fonctionner :)

Du coup, ca s’utilise de la même façon que le client SOAP de base:

$client = new SoapClientSessionnable(
    'http://host.com/path/to/wsdl',
    array(
        // Options
        'trace'         => 1,
        'soap_version'  => SOAP_1_1,
        ....
    )
);

Pensez quand même à mettre $client en session pour qu’il soit réutilisable dans la page suivante :)

Mots-clefs : ,

5 Réponses à “Connexion persistente du client SOAP PHP à travers une session”

  1. FireWave a dit:

    Tu devrais te renseigner au sujet des Design Pattern, et dans ton cas, du Singleton.. C’est quasiment ce que tu as fais..

  2. GuyKPADJIK a dit:

    Pas du tout, non.

    je ne cherche pas à avoir une seul instance de la classe SoapClient, je cherche à avoir une reconnexion automatique au « réveil », c’est à dire lorsque l’instance en question est recréée par la session qui se relance, dans la page suivante.

    Il peut tout a fait y avoir 26 instances SoapClient(Sessionnable), ca n’est pas le problème.

  3. Romain a dit:

    Eh bien fait une classe qui encapsule le client SOAP ! Un genre de « factory ».

  4. Sun Location Vacances a dit:

    C’est une idée vraiment simpa en tout cas pour garder Soap en session :), merci :)

  5. Greg a dit:

    Pour stocker la variable objet en session il est bien entenu nécessaire de la sérialiser ;)

    merci pour ton code !

Laisser une réponse