Привязать запрос SoapClient к определенному IP

Мне нужно реализовать веб-сервис, где SoapServer требует, чтобы я отправлял данные с использованием определенного IP-адреса на SoapClient машине, у которой есть несколько разных IP-адресов. Проблема в том, как заставить PHP отправлять этот запрос, используя этот конкретный 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");
        }

    }
}

person Rodrigo    schedule 21.09.2010    source источник


Ответы (1)


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

Я согласен с тем, что в документации должен быть указан этот параметр.

person halfdan    schedule 21.09.2010
comment
Спасибо за предложение, но я получаю сообщение об ошибке: SOAP-ENV:Client: Operation '' is not defined in the WSDL for this service при звонке сейчас - person Rodrigo; 21.09.2010
comment
$ wsdl должен быть вашим WSDL. Он просто был помещен в этот пример сценария, потому что его нужно передать SoapClient при создании экземпляра. - person halfdan; 21.09.2010
comment
да, у меня это реализовано, как вы сказали, проблема в том, что если я назначаю порт, он дает эту ошибку, если я просто заполняю IP-адрес, он работает, по-видимому, порт должен быть определен в исходном wsdl. - person Rodrigo; 21.09.2010