PHP :: SoapClient вместо Zend_Soap_Client в (Zend Server с Zend Framework версии 1.10.7)

У меня все мои вызовы SOAP успешно работают в PHP CORE (когда я запускаю их в WAMP). Но когда я пытаюсь просто добавить тот же код на Zend Server, по какой-то причине он говорит: «Сервер обнаружил внутреннюю ошибку». Не уверен что происходит! Вызов с использованием SoapClient() вообще не работает ... Я использую локальный WSDL и локальный мыльный сервис, предоставляемый Alchemy. В любом случае, я пробовал то же самое с Zend_Soap_Client, но все равно это не работает !! Вот дамп созданного Zend Soap Client:

object(Zend_Soap_Client)#37 (29) { ["_encoding":protected]=> string(5) "UTF-8" ["_classmap":protected]=> NULL ["_faultExceptions":protected]=> array(0) { } ["_soapVersion":protected]=> int(2) ["_uri":protected]=> NULL ["_location":protected]=> NULL ["_style":protected]=> NULL ["_use":protected]=> NULL ["_login":protected]=> NULL ["_password":protected]=> NULL ["_proxy_host":protected]=> NULL ["_proxy_port":protected]=> NULL ["_proxy_login":protected]=> NULL ["_proxy_password":protected]=> NULL ["_local_cert":protected]=> NULL ["_passphrase":protected]=> NULL ["_compression":protected]=> NULL ["_connection_timeout":protected]=> NULL ["_stream_context":protected]=> NULL ["_features":protected]=> NULL ["_cache_wsdl":protected]=> NULL ["_user_agent":protected]=> NULL ["_wsdl":protected]=> string(77) "C:\Program Files (x86)\Zend\Apache2\htdocs\C3Nexus\application\WSAlchemy.wsdl" ["_soapClient":protected]=> NULL ["_lastMethod":protected]=> string(0) "" ["_soapInputHeaders":protected]=> array(0) { } ["_permanentSoapInputHeaders":protected]=> array(0) { } ["_soapOutputHeaders":protected]=> array(0) { } ["location"]=> string(29) "http://localhost:3434/Alchemy" 

Даже вызов типа getFunctions() на клиенте выдает ошибку. Что я делаю неправильно?

Обнаружил эти ошибки в ZendEnabler.log

[3/15/2013 2:21:55 PM] Error: Read data error - unable to get read result. Code 109.
[3/15/2013 2:21:55 PM] Error: Request for C:/Program Files (x86)/Zend/Apache2/htdocs/SOME/public/index.php: Unable to get the response from PHP process
[3/15/2013 2:21:55 PM] Error: PHP process 9872 from the "application/x-httpd-php" pool has exited with status 255.

Запрос URL: http://localhost:8089/SOME/public/index.php/NewPatient/load-gsdd-data

Следовательно,

Контроллер: NewPatient Действие: loadGssdData

Я пишу мыльный вызов в этом действии.

Это работает:

$hey = new Zend_Soap_Client(APPLICATION_PATH . '\WSAlchemy.wsdl');
$hey->location ='http://localhost:3434/Alchemy';
echo var_dump($hey);

Но терпит неудачу, когда я звоню $hey->getFunctions()!

Это вообще не работает,

$hey = new SoapClient(APPLICATION_PATH . '\WSAlchemy.wsdl');
$hey->location ='http://localhost:3434/Alchemy';
echo var_dump($hey);

или даже это!

 $hey = new SoapClient("http://localhost:8089/SOME/public/WSAlchemy.wsdl");
 echo var_dump($hey);

Примечание. Я могу получить доступ к файлу wsdl по адресу http://localhost:8089/SOME/public/WSAlchemy.wsdl

Интересно, почему я не могу использовать SoapClient в Zend Server, который является ядром PHP !! :(

Чтобы попробовать, я отключил Soap Client в Zend Server. Он сказал:

[15-Mar-2013 14:46:23] PHP Fatal error:  Class 'SoapClient' not found in C:\Program Files (x86)\Zend\Apache2\htdocs\SOME\application\controllers\GSDD.php on line 2

Итак, я снова включил, там нет ошибки, но я все равно получаю ошибку! Это мой журнал доступа к серверу после включения расширения:

127.0.0.1 - - [15/Mar/2013:14:54:06 -0400] "POST /ZendServer/index.php/Log-Tail/Index HTTP/1.1" 200 9205
127.0.0.1 - - [15/Mar/2013:14:54:07 -0400] "POST /ZendServer/index.php?controller=systray&action=exec&do=ping HTTP/1.1" 200 643
127.0.0.1 - - [15/Mar/2013:14:54:35 -0400] "GET /SOME/public/index.php/NewPatient/load-gsdd-data HTTP/1.1" 500 499

Итак, когда я загружаюсь, я получаю следующее:

Ошибка

После того, как я открываю этот файл, там есть ошибка сервера.

Остальные контроллеры и действия работают нормально! У меня просто проблема с этим действием.

Большое спасибо за уделенное время :)


person Yash    schedule 15.03.2013    source источник
comment
Обычно в вашем журнале PHP будет более информативное сообщение об ошибке, просто «500 Internal server error». Допустим, проверьте зависимости. libxml должен быть включен, и если вы используете SSL с этой службой, убедитесь, что openssl настроен. Попробуйте отключить кеширование WSDL и включить параметр трассировки (отладка) с помощью SoapClient.   -  person ficuscr    schedule 15.03.2013
comment
Спасибо за быстрый комментарий. Когда я использую Zend Server, я видел журналы на php_error, он ничего не показывает. Я проверил журналы доступа, журналы ошибок, ничего не отображается. Для кеша я сделал это ini_set('soap.wsdl_cache_enabled',0); ini_set('soap.wsdl_cache_ttl',0); , но все равно не повезло! Опция трассировки включена Zend по умолчанию. Спасибо за ответ :)   -  person Yash    schedule 15.03.2013
comment
Проверяли error_reporting уровень? Не просто подавить ошибки? Не могу отладить общую «Внутреннюю ошибку сервера».   -  person ficuscr    schedule 15.03.2013
comment
Нашел несколько логов, см. Обновленный пост. Спасибо   -  person Yash    schedule 15.03.2013
comment
Вы установили расширение soap в свою установку zend server?   -  person Maks3w    schedule 15.03.2013


Ответы (2)


Хм, есть немного дежавю. Почти наверняка нечетный номер порта шара ... openCM? Соответствует ли этому примеру WSDL? Попробуйте 'proxy_host' и'proxy_port' с вашими опциями SoapClient?

Обнаружил, что это может быть то же самое: https://stackoverflow.com/questions/1439615/workaround-for-php-soap-request-failure-when-wsdl-defines-service-port-binding-a

person ficuscr    schedule 15.03.2013
comment
Спасибо за ответ, но я не использую прокси. Я запускаю сервер на http://localhost:8089 и вызываю мыло на порт 3434. Итак, я должен поставить какие-нибудь proxy_port? Если да, то в порт 3434? Так как я запускал wamp на 8080, а мыло на 3434, никогда не устанавливал параметр proxy_port, не было проблем! Добавив в сообщение WSDL, мой файл WSDL является локальным файлом, это означает, что, как вы видите в сообщении, он находится в каталоге application, где на сервере есть все исходные файлы. Я тоже не использую ssl. В любом случае, позвольте мне попробовать добавить хост как localhost и порт 8089 .. - person Yash; 15.03.2013
comment
разрешается в браузере? hosts проблема может быть, что еще изменилось / отличается от сервера A к серверу B ...? - person ficuscr; 15.03.2013
comment
:( Нет, не работает! Тот же самый код работал для wamp на 8080, я вообще-то не понимаю, что может быть не так для 8089 (это просто apache, предоставленный самим Zend). Спасибо за ответ! - person Yash; 15.03.2013
comment
Ваши хосты / виртуальные хосты настроены с Apache? т.е. NameVirtualHost *:8089? - person ficuscr; 15.03.2013
comment
Что ж, я могу получить доступ к сайту. Нет проблем, там много страниц, это рабочий сайт. Так что не должно быть проблем с хостами. Я просто пытаюсь добавить функциональность к существующему сайту, теперь у меня проблемы просто с этим действием .. лучшие страницы хороши! - person Yash; 15.03.2013

Хорошо, наконец-то исправили!

В процессе узнал, как все устроено, но, лол, это глупая причина!

Zend was unable to read the Schema File Вот и все !!!

Небольшая проблема, уф!

Извините, если этот вопрос вас обеспокоил;)

Но да, WSDL и файл схемы должны идти рука об руку! Как я соскучился по этому!

Спасибо всем за просмотр этого вопроса!

person Yash    schedule 15.03.2013