【发布时间】:2016-08-12 18:04:06
【问题描述】:
我在尝试使用标准 PHP SoapClient 访问 SoapServer 上的方法时遇到问题。问题是 SoapServer 上的方法以相同的名称列出了两次,但操作不同。
例如:SOAP UI 显示 GetStockQuote 和 GetStockQuote 列出了两次,但第二个 GetStockQuote 实际上将调用 GetStockQuoteV2。
但是我的PHP SoapClient,如果我调用$client->GetStockQuote,它会自动调用第一个。根据我的研究,我必须这样做。
$client->__soapCall('GetStockQuote', array($request), array('soapaction'=>'GetStockQuoteV2'));
但是当我处于 wsdl 模式时,它仍然调用 GetStockQuote 而不是 GetStockQuoteV2。
我的结论是我必须在非 wsdl 模式下运行并处理由此带来的烦恼。在非wsdl模式下,上面的__soapCall似乎调用了正确的方法,但是因为我是在非wsdl模式下,所以我认为在构建服务器需要的适当AuthHeader时存在问题。
我的问题是,我可以在 PHP SoapClient wsdl-mode 中重新映射肥皂动作吗?
【问题讨论】:
-
在开发应用程序时,总是在禁用缓存的情况下运行soap客户端。 $client = new SoapClient('somewhere.com/?wsdl', array('cache_wsdl' => WSDL_CACHE_NONE) );也许分享你的 wsdl 文件。此外,如果您使用禁用 WS-I 合规性并启用 WS-I 合规性模式的 SOAP,则两个 wsdl 文件都不同。
标签: php web-services soap wsdl