2013-03-15 72 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