PHP SOAP返回SOAP错误:服务器无法使用.asmx Web Service处理请求


PHP SOAP returning SOAP Fault: Server was unable to process request with .asmx Web Service

我很难让SOAP请求正常工作,因为它需要XML字符串作为输入。

它正在投掷

"SOAP故障:服务器无法处理请求。--->值不能为null。参数名称:s">

无论我发送什么输入,我都使用了nusoap,但没有用,PHP soap库。我使用的代码是:

<?
$aOptions = array(
'location' => 'http://webserviceurl.asmx',
'uri' => 'http://tempuri.org/',
"style" => SOAP_RPC,
"use" => SOAP_ENCODED
);
$client = new SOAPClient(null, $aOptions);
$request ='<item xmlns="rmsItem">
      <columns>
        <column>description</column>
        <column>department</column>
        <column>brand</column>
        <column>lastsold</column>
        <column>lastupdated</column>
        <column>quantityonhand</column>
        <column>weight</column>
      </columns>
      <filters>
        <filter>
          <filterColumn>quantityonhand</filterColumn>
          <operator>greaterthan</operator>
          <filterValue>20</filterValue>
        </filter>
        <filter>
          <filterColumn>lastsold</filterColumn>
          <operator>greaterthan</operator>
          <filterValue>01-01-2005</filterValue>
        </filter>
      </filters>
      <sortColumns>
        <sortColumn>
          <sortColumnName>lastsold</sortColumnName>
          <sortType>ascending</sortType>
        </sortColumn>
        <sortColumn>
          <sortColumnName>quantityonhand</sortColumnName>
          <sortType>descending</sortType>
        </sortColumn>
      </sortColumns>
    </item>';
//$result = $client->__soapCall('getAllInfo',array('infoRequestXml'=>(string)($request),'errorMessage'=>'') ,array('soapaction' => 'http://webserviceurl/getAllInfo'));
$soapvar = new SoapVar($request , XSD_ANYXML);
$params = array("infoRequestXml" => $soapvar);
//print_r($params);
//$result = $this->soapclient->__soapCall("SaveItem", array("parameters"=>$params), null, $this->soapheaders);
try
{
$result=$client->__soapCall('getAllInfo',array("parameters"=>$params),array('soapaction' => 'http://webserviceurl/getAllInfo'));
}
catch (SoapFault $e) {
    echo "SOAP Fault: ".$e->getMessage()."<br />'n";
}
echo "<pre>'n";
echo htmlspecialchars($client->__getLastRequest())."'n";
echo "Response:'n".htmlspecialchars($client->__getLastResponse())."'n";
echo "</pre>"; 
var_dump($result);
?>

最近两天,我的头撞到了墙上,在谷歌上搜索了这个问题,但没有得到解决或指导我解决的答案。

任何能对此有所了解的人都将不胜感激。提前谢谢。

不要通过SOAPVar运行XML,如果可以的话,可以利用web服务的WSDL选项:

<?php
$client = new SOAPClient(
    'http://webserviceurl.asmx?WSDL',
    array(
        'location' => 'http://webserviceurl.asmx',
        'trace' => 1,
        'style' => SOAP_RPC,
        'use' => SOAP_ENCODED,
    )
);
$request = '<item xmlns="rmsItem">
      <columns>
        <column>description</column>
        <column>department</column>
        <column>brand</column>
        <column>lastsold</column>
        <column>lastupdated</column>
        <column>quantityonhand</column>
        <column>weight</column>
      </columns>
      <filters>
        <filter>
          <filterColumn>quantityonhand</filterColumn>
          <operator>greaterthan</operator>
          <filterValue>20</filterValue>
        </filter>
        <filter>
          <filterColumn>lastsold</filterColumn>
          <operator>greaterthan</operator>
          <filterValue>01-01-2005</filterValue>
        </filter>
      </filters>
      <sortColumns>
        <sortColumn>
          <sortColumnName>lastsold</sortColumnName>
          <sortType>ascending</sortType>
        </sortColumn>
        <sortColumn>
          <sortColumnName>quantityonhand</sortColumnName>
          <sortType>descending</sortType>
        </sortColumn>
      </sortColumns>
    </item>';
$result = array();
$params = array("infoRequestXml" => $request);
try {
    $result = $client->__soapCall('getAllInfo', array("parameters"=>$params));
} catch (SoapFault $e) {
    echo "SOAP Fault: ".$e->getMessage()."<br />'n";
}
echo "<pre>";
echo htmlspecialchars($client->__getLastRequestHeaders())."'n";
echo htmlspecialchars($client->__getLastRequest())."'n";
echo "Response:'n".htmlspecialchars($client->__getLastResponseHeaders())."'n";
echo htmlspecialchars($client->__getLastResponse())."'n";
echo "</pre>"; 
var_dump($result);
?>