2011-07-06 68 views
1

我很难获得SOAP请求正常工作,这需要XML字符串作为输入。返回SOAP错误的PHP SOAP:服务器无法使用.asmx Web服务处理请求

它抛出

“SOAP错误:服务器无法处理请求--->值不能为空参数名:的”

不管我送什么投入,我有使用nusoap但无济于事,PHP肥皂库。 我使用的代码是:

<? 
$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); 

?> 

我敲我的头靠在从最近两天的墙壁,谷歌搜索这个问题,但没有得到答复,解决或指导我。

任何人都可以抛出一些光在此将不胜感激。 在此先感谢。

回答

1

不要通过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); 

?> 
+0

....非常感谢皮特。它的工作就像一个魅力。 ..你救了我的一天....如果你不介意我可以再问你一件事,你能指出我究竟是在做错什么,所以下一次我不要再把事情搞砸了。新的PHP SOAP场景...我如何从结果数组中访问我的结果XML ...再次感谢您宝贵的时间和想法...... –

+0

我得到了响应工作,并在将Object转换回来之后一个数组并将该数组的所需元素传递给** simplexml_load_string()** ... –