2013-03-15 106 views
0

我有我的所有SOAP調用成功在PHP CORE(當我運行它們在WAMP中)。但是,當我嘗試將相同的代碼添加到Zend Server時,出於某種原因它說「服務器遇到內部錯誤」。 不知道發生了什麼事! 使用SoapClient()的呼叫根本不起作用... 我正在使用由Alchemy提供的本地WSDL和本地肥皂服務。 反正,我也試過Zend_Soap_Client也一樣,但還是不行! 這裏是Zend的SOAP客戶端創建轉儲:PHP :: SoapClient而不是Zend_Soap_Client(Zend服務器與Zend Framework版本1.10.7)

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. 

網址:http://localhost:8089/SOME/public/index.php/NewPatient/load-gsdd-data

因此,

控制器:NewPatient 操作:loadGssdData

我寫的SOAP調用在行動。

這工作:

$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); 

注:我可以在http://localhost:8089/SOME/public/WSAlchemy.wsdl

訪問WSDL文件我不知道爲什麼我不能在Zend服務器,其核心是一個PHP使用SoapClient! :(

嘗試,我禁用SOAP客戶端在Zend服務器 它說:

[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 

所以,當我打開我得到這個:

Error

打開該文件後,出現服務器錯誤。

其他控制器和操作正常工作!我只是有這個問題。

非常感謝您的時間:)

+0

通常在您的PHP日誌中會出現更多信息錯誤消息,即'500內部服務器錯誤'。假設檢查依賴關係。應該啓用'libxml',如果你在這項服務中使用SSL,你應該確保'openssl'已經設置。嘗試禁用WSDL緩存並使用SoapClient打開[trace option](http://php.net/manual/en/soapclient.getlastrequest.php)(調試)。 – ficuscr 2013-03-15 18:07:35

+0

感謝您的快速評論。當我使用Zend Server時,我在php_error中看到了日誌,它什麼也沒有顯示。我檢查了訪問日誌,錯誤日誌,沒有顯示任何內容。對於緩存,我做了這個'ini_set('soap.wsdl_cache_enabled',0); ini_set('soap.wsdl_cache_ttl',0); '仍然沒有運氣! Trace選項默認由Zend啓用。感謝您的回覆:) – Yash 2013-03-15 18:17:31

+0

檢查'error_reporting'級別?不是簡單地壓制錯誤?無法真正調試通用的「內部服務器錯誤」。 – ficuscr 2013-03-15 18:19:38

回答

0

好了,終於定了!

在這個過程中,學會了事物如何運作,但是,大聲笑它是一個愚蠢的理由!

Zend was unable to read the Schema File 就是這樣!

小問題,唷!

很抱歉,如果這個問題困擾着你;)

但是,是的WSDL和架構文件必須齊頭並進!我怎麼錯過了這個!

感謝所有人查看此問題!

0

嗯,有一些deje vu。幾乎可以肯定的奇數球端口號... openCM? WSDL是否跟隨?用你的SoapClient選項嘗試'proxy_host''proxy_port'

發現這可能是同樣的事情:Workaround for PHP SOAP request failure when wsdl defines service port binding as https and port 80?

+0

Thanks for reply.But我沒有使用任何代理服務器。我在'http:// localhost:8089'上運行服務器,並且在端口3434處調用soap。那麼,我應該放置任何'proxy_port'嗎?如果是這樣,要端口'3434'?因爲,我在'8080'運行了wamp,在'3434'運行了soap,從來沒有設置'proxy_port'選項沒有問題!添加WSDL後,我的WSDL文件是本地文件,這意味着就像您在後期看到的那樣,它位於服務器擁有所有源文件的「應用程序」目錄中。我不使用ssl too.ANyways,讓我嘗試添加主機作爲'localhost'和端口'8089' .. – Yash 2013-03-15 19:11:09

+0

它解決在瀏覽器中? 'hosts'問題可能,還有哪些改變/從服務器A到服務器B不同? – ficuscr 2013-03-15 19:18:27

+0

:(不要工作!因爲相同的代碼在'8080'上運行wamp,我實際上並沒有看到'8089'(這只是Zend自己給出的apache)可能會出錯。謝謝你的回覆! – Yash 2013-03-15 19:18:49