Время ожидания PHP SoapClient

Я пытаюсь вызвать клиента Soap для тестирования с того же сервера, на котором я запускаю службу. Мой WSDL находится по адресу: http://www.installittoday.com/api/server.php?wsdl Я пытаюсь загрузить его просто с помощью:

$client = new SoapClient('http://www.installittoday.com/api/server.php?wsdl'); 

но я возвращаю ошибку:

Warning: SoapClient::SoapClient(http://www.installittoday.com/api/server.php?wsdl) [soapclient.soapclient]: failed to open stream: Connection timed out in /home/installi/public_html/api/client.php on line 4 Warning: SoapClient::SoapClient() [soapclient.soapclient]: I/O warning : failed to load external entity "http://www.installittoday.com/api/server.php?wsdl" in /home/installi/public_html/api/client.php on line 4 Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://www.installittoday.com/api/server.php?wsdl' : failed to load external entity "http://www.installittoday.com/api/server.php?wsdl" in /home/installi/public_html/api/client.php:4 Stack trace: #0 /home/installi/public_html/api/client.php(4): SoapClient->SoapClient('http://www.inst...') #1 {main} thrown in /home/installi/public_html/api/client.php on line 4
Warning: SoapClient::SoapClient(http://www.installittoday.com/api/server.php?wsdl) [soapclient.soapclient]: failed to open stream: Connection timed out in /home/installi/public_html/api/client.php on line 4 Warning: SoapClient::SoapClient() [soapclient.soapclient]: I/O warning : failed to load external entity "http://www.installittoday.com/api/server.php?wsdl" in /home/installi/public_html/api/client.php on line 4 Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://www.installittoday.com/api/server.php?wsdl' : failed to load external entity "http://www.installittoday.com/api/server.php?wsdl" in /home/installi/public_html/api/client.php:4 Stack trace: #0 /home/installi/public_html/api/client.php(4): SoapClient->SoapClient('http://www.inst...') #1 {main} thrown in /home/installi/public_html/api/client.php on line 4 

Тем не менее, я могу настроить клиента просто отлично с другого сайта. Это проблема брандмауэра или что?

Убедитесь, что эти расширения включены в php.ini

 extension=php_curl.dll extension=php_openssl.dll extension=php_soap.dll 

Кроме того, загрузка здесь прекрасна.

Попробуйте подключиться к нему с сайта, на котором вы хотите, чтобы клиент работал с веб-браузером, или если на его удаленной машине без прокси-сервера используется завиток:

 curl http://www.installittoday.com/api/server.php?wsdl 

Это скажет вам, можете ли вы даже получить соединение с этим сайтом через машину.

Вы также можете попробовать несколько подключений или увеличить значение default_socket_timeout, если скорость соединения ваших компьютеров ограничена / перегружена.

Какие порты вы пытаетесь подключить?

Для тех, кто сталкивается с этой ошибкой. Попробуйте отключить кеш WSDL, либо с вашего php.ini, либо с помощью параметра в SOAP-вызове.

Проблема в том, что PHP по умолчанию кэширует файл WSDL в папке temp. После первого кэширования файла PHP продолжает использовать этот файл. Он обновляется только через 24 часа (по умолчанию ttl для кеша).

Поэтому, если вы измените файл WSDL, PHP запустит старый, что приведет к ошибке, например, OP. Мэтт, ваша проблема была решена с помощью ссылки на файл, который никогда не кэшируется.

Причина, по которой он кэшируется по умолчанию, потому что ваш сервер должен запросить файл, а затем проанализировать его, что требует немного выборки и обработки.

У вас есть два варианта: либо изменить соответствующую переменную в php.ini, либо отправить параметр вместе с вашим вызовом SOAP.

Например:

 $client = new SoapClient($webservice, array('classmap' => $soap_class_map, 'cache_wsdl' => WSDL_CACHE_NONE)); 

Надеюсь это поможет.

ОП снова здесь.

Еще немного контекста: у меня есть сервис (очевидно) на installittoday.com. Я также пытаюсь запустить клиента из того же места только для тестирования. Я могу подключиться к сервису буквально на каждом другом сайте, который я пробовал отлично, и я успешно открыл несколько WSDL с клиентом, размещенным на installittoday. Кажется, сайт почему-то не может подключиться к себе.

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

Теперь, когда я дошел до этого, я понимаю, что эта проблема, вероятно, выходит за пределы SOAP до какой-то проблемы с конфигурацией Apache, если только нет вещи порта, которые мне не хватает. Я не настроил какие-либо порты по-другому, есть ли один из них, я должен убедиться, что у меня есть открытый для SOAP?

Я решил эту проблему, сохранив динамически созданный WSDL nusoap как автономный файл, и все, кажется, работает нормально. Я понятия не имею, почему это так.

Я все равно планирую перенести его на PHP5, я просто использовал nuSoap для создания WSDL.