Тайм-аут PHP SoapClient - PullRequest
       19

Тайм-аут PHP SoapClient

1 голос
/ 29 апреля 2009

Я пытаюсь вызвать Soap Client для тестирования с того же сервера, на котором я запускаю службу. Мой 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

И все же я могу настроить клиента с другого моего сайта. Это проблема с брандмауэром или как?

Ответы [ 5 ]

3 голосов
/ 20 мая 2012

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

extension=php_curl.dll 
extension=php_openssl.dll 
extension=php_soap.dll
2 голосов
/ 29 апреля 2009

Также загрузка отсюда нормально.

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

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

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

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

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

1 голос
/ 08 июня 2011

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

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

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

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

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

Например:

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

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

0 голосов
/ 29 апреля 2009

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

В любом случае я планирую переместить его на PHP5, я просто использовал nuSoap для генерации WSDL.

0 голосов
/ 29 апреля 2009

OP снова здесь.

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...