PHP SoapClient-> __ doRequest

时间:2012-11-23 07:35:09

标签: php soap-client

我需要手动测试一些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而没有任何错误。

2 个答案:

答案 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; 
}