2010-09-21 7 views
1

Je dois implémenter un service web où le SoapServer m'oblige à envoyer des données en utilisant une adresse IP spécifique à la machine SoapClient qui a un tas d'adresses IP différentes. Le problème est, comment forcer PHP à envoyer cette demande en utilisant cette adresse IP spécifique?Lier la requête SoapClient à un IP spécifique

La documentation PHP sur SOAP est vraiment mauvaise.

Merci.


Avec la réponse de Halfdan i a pu résoudre le problème, donc je suis postant un extrait de la façon dont il est avéré:

protected function load_ws() { 
    if ($this->ws == null) { // load webservice 

     ini_set("soap.wsdl_cache_enabled", 0); 
     ini_set("allow_url_fopen", 1); 

     try { 
      if ($this->context == null) // load stream context socket 
       $this->context = stream_context_create(array(
        "socket" => array(
         "bindto" => te_auth_ip.":0" 
        ) 
       )); 

      $this->ws = new SoapClient($this->wsdl_path, array(
       "soap_version" => SOAP_1_1, 
       "style" => SOAP_RPC, 
       "use" => SOAP_ENCODED, 
       "authentication" => SOAP_AUTHENTICATION_BASIC, 

       "login" => te_login, 
       "password" => te_pass, 

       "encoding" => "UTF-8", 
       "trace" => true, 
       "exceptions" => true, 
       "compression" => SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP, 
       "connection_timeout" => te_timeout, 
       "stream_context" => $this->context 
      )); 

     } catch (SoapFault $fault) { 
      $this->error($fault, "LOAD"); 
     } 

    } 
} 
+0

Est-ce que ma suggestion a fonctionné? – halfdan

Répondre

3

Cela devrait fonctionner (voir #60004):

$options = array('socket' => array('bindto' => 'www.xxx.yyy.zzz:port')); 
$context = stream_context_create($options); 
$soap = new SoapClient($wsdl, array('location'=>'http://...','uri' => '...','stream_context' => $context)); 

Je suis d'accord que la documentation devrait inclure cette option.

+0

Merci pour votre suggestion, cependant je reçois une erreur, je reçois: 'SOAP-ENV: Client: Operation '' n'est pas défini dans le WSDL pour ce service' lors d'un appel maintenant – Rodrigo

+0

$ wsdl doit être votre WSDL . Il a juste été placé dans cet exemple de script car il doit être donné à SoapClient à l'instanciation. – halfdan

+0

Oui, je l'ai mis en œuvre comme vous l'avez dit le problème est que si j'attribue un port, il donne cette erreur, si je viens de remplir l'IP cela fonctionne, apparemment un port doit être défini au wsdl d'origine. – Rodrigo