我需要手动测试一些XML请求,即我想使用先前创建的XML请求调用webservice方法。 我正在尝试使用SoapClient __doRequest,而我所得到的只是一个空白的空响应。
我已经阅读过这些文档,还有其他一些帖子,似乎没有人在尝试过这个问题,而且很少有人问过类似的问题,实际上没有回复。
同样,这样做的原因只是一种测试由其他工具生成的XMLRequest的方法,这会导致某些web服务出现问题。 所以,我不能调用soapclient生成的方法,也不能称之为“_call”。 我需要使用SOAPClient发送我自己以前创建的XML请求。 这可能吗?如果是这样的话......
$result = $soapClient->__doRequest($docRequest, "http://someservice.asmx", "http://someservice/Login", soap_1_2, 0);
当我调用它时,我在$ result处得到null而没有任何错误。
答案 0 :(得分:3)
我设法做到了这样:
class LocalSoapClient extends SoapClient
{
function __doRequest($request, $location, $action, $version, $one_way = 0)
{
$request = "...."; // your changed XML goes here
return parent::__doRequest($request, $location, $action, $version, $one_way);
}
}
$client = new LocalSoapClient($wsdl_url, array('trace' => 1));
$client->__soapCall($function_name, array($service_call_params));
请注意,您不直接调用__doRequest - 执行标准__soapCall时会执行此操作。
答案 1 :(得分:1)
来自http://php.net/manual/soapclient.dorequest.php
也许你的电话会引发你需要捕捉的异常:
$exception = null;
$result = parent::__doRequest($request, $location, $action, $version, $one_way);
if((isset($this->__soap_fault)) && ($this->__soap_fault != null)) {
//this is where the exception from __doRequest is stored
$exception = $this->__soap_fault;
}
if($exception != null) {
throw $exception;
}