1

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

4

2 回答 2

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 时执行。

于 2013-01-27T22:04:22.300 回答
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; 
} 
于 2012-11-23T09:11:25.057 回答