【问题标题】:PHP::SoapClient instead of Zend_Soap_Client in (Zend Server with Zend Framework Version 1.10.7)PHP::SoapClient 代替 Zend_Soap_Client (Zend Server with Zend Framework Version 1.10.7)
【发布时间】:2013-03-15 18:03:14
【问题描述】:

我的所有 SOAP 调用都在 PHP CORE 中成功运行(当我在 WAMP 中运行它们时)。但是当我尝试将相同的代码添加到 Zend Server 时,由于某种原因它说“服务器遇到内部错误”。 不知道发生了什么! 使用SoapClient() 的呼叫根本不起作用... 我正在使用 Alchemy 提供的本地 WSDL 和本地肥皂服务。 不管怎样,我也尝试了Zend_Soap_Client,但是还是不行!! 这是 Zend Soap 客户端创建的转储:

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

我正在那个动作中写肥皂电话。

这行得通:

$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 Server 中使用SoapClient,这是 PHP 的核心之一! :(

为了尝试,我在 Zend Server 中禁用了 Soap Client 它说:

[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

所以当我加载时,我得到了这个:

打开那个文件后,里面有服务器错误。

其他控制器和操作运行良好!我只是对此操作有疑问。

非常感谢您的宝贵时间:)

【问题讨论】:

  • 通常在您的 PHP 日志中会有一条信息更丰富的错误消息,即“500 内部服务器错误”。假设检查依赖关系。 libxml 应该被启用,如果你在这个服务中使用 SSL,你应该确保 openssl 被设置。尝试禁用 WSDL 缓存并使用 SoapClient 打开trace option(调试)。
  • 感谢您的快速评论。当我使用 Zend Server 时,我在 php_error 看到了日志,它什么也没显示。我检查了访问日志,错误日志,没有显示任何内容。对于缓存,我这样做了 ini_set('soap.wsdl_cache_enabled',0); ini_set('soap.wsdl_cache_ttl',0); 仍然没有运气! Zend 默认启用 Trace 选项。感谢您的回复:)
  • 检查error_reporting 级别?不是简单地抑制错误?无法真正调试通用的“内部服务器错误”。
  • 找到了一些日志,查看更新后的帖子。谢谢
  • 您是否在您的zend 服务器安装中安装了soap 扩展?

标签: zend-framework soap-client zend-server zend-server-ce


【解决方案1】:

嗯,有点似曾相识。几乎可以肯定是奇数球端口号...... openCM? WSDL 会效仿吗?在您的 SoapClient 选项中尝试 'proxy_host''proxy_port'

发现这可能是同一件事:Workaround for PHP SOAP request failure when wsdl defines service port binding as https and port 80?

【讨论】:

  • 感谢您的回复。但我没有使用任何代理。我在http://localhost:8089 运行服务器,我在3434 端口调用soap。那么,我应该输入任何proxy_port 吗?如果是这样,端口3434 ?因为,我在 8080 运行 wamp,在 3434 运行肥皂,从不设置 proxy_port 选项没有问题!在 WSDL 帖子上添加,我的 WSDL 文件是本地文件,这意味着正如您在帖子中看到的,它位于服务器包含所有源文件的 application 目录中。我也没有使用 ssl。无论如何,让我尝试将主机添加为 localhost 和端口 8089..
  • 能否在浏览器中解析? hosts 问题可能,从服务器 A 到服务器 B 还有什么变化/不同...?
  • :( 没有 din 工作!同样的代码在 8080 也适用于 wamp,我实际上并没有看到 8089 有什么问题(这只是 Zend 本身给出的 apache )。感谢您的回复!
  • 您使用 Apache 的主机/虚拟主机设置?即NameVirtualHost*:8089?
  • 嗯,我可以访问该站点。那里没问题,有很多页面,它是工作站点。所以主机不应该有问题。我只是想添加一个功能现有网站,现在我只是在那个操作上遇到了问题..rest 页面很好!
【解决方案2】:

好的,终于修好了!

在这个过程中,了解了事情是如何运作的,但是,哈哈,这是一个愚蠢的理由!

Zend was unable to read the Schema File 就是这样!!!

小问题,呸!

如果这个问题给您带来了困扰,请见谅 ;)

但是是的,WSDL 和 Schema 文件必须齐头并进!我怎么会错过这个!

感谢大家查看此问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多