我们有以下场景:
- 设置一个 web 服务 - wsdl 和所有的,应该监听客户端发送的数据,接收它,用它做一些事情,如果一切正常,发送一个响应为“ok”,如果有什么东西死了,发送一个“假”
- 客户端运行生成soap/xml 请求位的脚本,创建soap 客户端并将请求发送到wsdl。
- 客户端得到一个结果,表明 Web 服务未处理数据 - 错误。Web 服务根本不接收任何数据。
我无权访问网络服务——它是别人的。生成的请求正文(整个等)正在正确生成-当我通过soapUI发送它时它可以工作,但不能通过我的php soap客户端。
SoapClient
我尝试使用带有,__doRequest
的内置 Soap __call
(尝试了一切),但没有任何反应 - 仍然得到'false'
结果。我尝试重写 NuSoap 以使用 Soap 1.2,但仍然只是'false'
返回 true 的结果。
所以,我想知道是否有人可以回答我以下问题:
在服务器上,我是否需要专门安装一些东西才能使其与 Soap 1.2 一起使用?
当客户端必须向 Web 服务的函数发送数据时,我应该使用 __doRequest 还是 __call?或者是其他东西?
根据我的 php.ini,服务器 header_accept 值没有使用soap 1.2所需的应用程序/soap+xml - 如果是的话,这可能是问题所在 - 回到问题1,或者我如何将类型添加到header_accept?
编辑:
$client = new SoapClient(
"the_wsdl_url_correct_for_sure.wsdl",
array(
'soap_version' => SOAP_1_2,
'trace' => 1,
)
);
$result = $client->__doRequest(
$the_var_i_use_to_store_the_soap_xml_thingie_that_works_through_soapUI_so_it_is_correct, $location,
$the_function_I_try_to_call,
"1.2"
);
因为$location
我是动作的命名空间(我试图调用的函数并将数据从第一个参数发送到)。对于动作/功能,我尝试仅使用在命名空间中定义的动作名称,并使用带有“full_namespace/action”的完整路径
我应该使用__doRequest
还是__call
尝试将数据发送到 WSDL?
编辑2:
我发送的请求是:
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:soapenc="http://www.w3.org/2003/05/soap-encoding" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Header/>
<env:Body>
<ns2:FunctionName xmlns:ns2="namespace_of_the_service">
<arg0>
<data1>Some data</data1>
</arg0>
</ns2:FunctionName>
</env:Body>
</env:Envelope>
更多关于这个问题的信息可以在我之前的帖子中阅读: PHP Soap Client - 发送错误的标头“soapenv:VersionMismatch”