2010-09-21 3 views
1

Мне нужно реализовать веб-сервис, где SoapServer требует от меня отправлять данные с использованием определенного IP-адреса на машине SoapClient, которая имеет множество разных IP-адресов. Проблема в том, как заставить PHP отправлять этот запрос с использованием этого конкретного IP-адреса?Bind SoapClient запрос к определенному IP-адресу

Документация PHP по SOAP действительно бедна.

Спасибо.


С ответом Хальвдана я был в состоянии решить эту проблему, поэтому я отправляю фрагмент, как оказалось:

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

Мое предложение работает? – halfdan

ответ

3

Это должно работать (см #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)); 

Я согласен с тем, что документация должна включать эту опцию.

+0

Спасибо за ваше предложение, однако я получаю сообщение об ошибке: я получаю: 'SOAP-ENV: Клиент: операция '' не определена в WSDL для этой службы' при выполнении звонка сейчас – Rodrigo

+0

$ wsdl должен быть вашим WSDL , Он просто был помещен в этот пример скрипта, потому что он должен быть предоставлен SoapClient при создании экземпляра. – halfdan

+0

да, у меня это реализовано, поскольку вы сказали, что проблема в том, что если я назначаю порт, он дает эту ошибку, если я просто заполняю ip, это работает, видимо, порт должен быть определен в исходном wsdl. – Rodrigo

Смежные вопросы