[PHP SOAP SESSIONS] Monter en session un objet soapClient

Monter en session un objet soapClient [PHP SOAP SESSIONS] - PHP - Programmation

Marsh Posté le 08-11-2006 à 21:04:15    

Bonjour à tous !
 
Dans un but premier, je cherchais à monter en session une instance de soapClient afin de garder une connexion "permanente" sans avoir à recréer de connexion à chaque requete à mon server soap.
J'ai lu quelques articles référencés sur google disant que les objets de classe Soap ne pouvaient etre mis en session .... joie ...
 
D'où cette question : comment faire pour réutiliser une connexion soap existante sans avoir à en recréer une ?
 

Code :
  1. // création d'un objet soap
  2. $monSoapClient = new SoapClient("https://123.456.789.0:1234/Tralala?wsdl",
  3.   array(
  4.    "loginName" => "bob",
  5.    "password" => "motdepasse",
  6.    "trace" => 1,
  7.    "exceptions" => 1,
  8.    "_soap_version" => 1.2
  9.   ));
  10. // ouverture d'une session
  11. $instance = $monSoapClient->__soapCall(
  12.   "OpenConnectionAndBeginSession",
  13.   array(
  14.    "loginName" => "bob",
  15.    "password" => "motdepasse",
  16.    "appID" => "whatever",
  17.    "appName" => "myAppName",
  18.    "qbFileName" => "fichier_quickbooks",
  19.    "reqFileMod" => "MultiUser"
  20.   ));
  21. // exemple de passage de requete
  22. $resultat_xml = ($monSoapClient->__soapCall("processRequest",array('instance'=>$instance,'request'=>$ma_requete_xml)));


 
L'idée serait de faire quelque chose du genre, et ce, quel que soit l'endroit où s'est exécuté  :
 

Code :
  1. if(!isset($monSoapClient)) {
  2. // code exécuté uniquement 1 seule fois de toute la session de travail dans l'application web
  3. $monSoapClient = creer_un_objet_soap();
  4. }
  5. if(!isset($mon_instance)) {
  6. // code exécuté uniquement 1 seule fois de toute la session de travail dans l'application web
  7. $mon_instance = creer_une_instance();
  8. }
  9. $resultat_xml = executer_une_requete( $ma_requete , $monSoapClient, $mon_instance );


 
Pas très clair tout ça, mais c'est le mieux que je puisse faire :S
 
Toute aide est vraiment la bienvenue !  :hello:


---------------
dieu créa l'homme et meuh fit la vache
Reply

Marsh Posté le 08-11-2006 à 21:04:15   

Reply

Marsh Posté le 24-04-2008 à 09:03:52    

Salut,
 
J'ai réussi à conserver une session Soap en php avec des webservice Axis2 en positionnant le "scope" à "transportSession" dans mon fichier service.xml de Axis2.
Ensuite, dans mon SoapClient en php, je met l'option  "trace" à true et je récupère le cookie de session avec une expression régulière sur la chaîne : soapClient->__getLastResponseHeaders() que je positionne ensuite avec soapClient->__setCookie('JSESSIONID', $cookie).
 
J'ai jamais réussi à faire pareil avec des SoapSession.
 
De plus, mes services n'étaient jamais détruits par Axis2 (quand il tourne sur Apache Tomcat), j'ai dû modifier la servlet Axis2 pour qu'elle les supprime au bout de 30 secondes. (je me suis basé sur le "HttpServer" de Axis2 qui lui pensait à supprimer le service. Je pense que c'est un bug de axis2 le fait qu'il ne détruisai pas le service...
 
 
 

le20k a écrit :

Bonjour à tous !
 
Dans un but premier, je cherchais à monter en session une instance de soapClient afin de garder une connexion "permanente" sans avoir à recréer de connexion à chaque requete à mon server soap.
J'ai lu quelques articles référencés sur google disant que les objets de classe Soap ne pouvaient etre mis en session .... joie ...
 
D'où cette question : comment faire pour réutiliser une connexion soap existante sans avoir à en recréer une ?
 

Code :
  1. // création d'un objet soap
  2. $monSoapClient = new SoapClient("https://123.456.789.0:1234/Tralala?wsdl",
  3.   array(
  4.    "loginName" => "bob",
  5.    "password" => "motdepasse",
  6.    "trace" => 1,
  7.    "exceptions" => 1,
  8.    "_soap_version" => 1.2
  9.   ));
  10. // ouverture d'une session
  11. $instance = $monSoapClient->__soapCall(
  12.   "OpenConnectionAndBeginSession",
  13.   array(
  14.    "loginName" => "bob",
  15.    "password" => "motdepasse",
  16.    "appID" => "whatever",
  17.    "appName" => "myAppName",
  18.    "qbFileName" => "fichier_quickbooks",
  19.    "reqFileMod" => "MultiUser"
  20.   ));
  21. // exemple de passage de requete
  22. $resultat_xml = ($monSoapClient->__soapCall("processRequest",array('instance'=>$instance,'request'=>$ma_requete_xml)));


 
L'idée serait de faire quelque chose du genre, et ce, quel que soit l'endroit où s'est exécuté  :
 

Code :
  1. if(!isset($monSoapClient)) {
  2. // code exécuté uniquement 1 seule fois de toute la session de travail dans l'application web
  3. $monSoapClient = creer_un_objet_soap();
  4. }
  5. if(!isset($mon_instance)) {
  6. // code exécuté uniquement 1 seule fois de toute la session de travail dans l'application web
  7. $mon_instance = creer_une_instance();
  8. }
  9. $resultat_xml = executer_une_requete( $ma_requete , $monSoapClient, $mon_instance );


 
Pas très clair tout ça, mais c'est le mieux que je puisse faire :S
 
Toute aide est vraiment la bienvenue !  :hello:


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed