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 : ,