我有一个问题,我试图使用标准的PHP SoapClient访问SoapServer上的方法。问题是SoapServer上的方法列出了两次具有相同的名称,但操作不同。PHP SoapClient重新映射WSDL模式下的SoapAction?
例如: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模式中重新映射soap动作吗?
始终在开发应用程序时禁用高速缓存的情况下运行soap客户端。 $ client = new SoapClient('http://somewhere.com/?wsdl',array('cache_wsdl'=> WSDL_CACHE_NONE));也许分享你的wsdl文件。另外,如果您正在使用具有禁用的WS-I兼容性的SOAP,并且启用了WS-I兼容模式,那么这两个wsdl文件都是不同的。 –