2011-07-06 10 views
1

SOAPリクエストを正しく取得するのが難しく、入力としてXML文字列が必要です。SOAPエラーを返すPHP SOAP:サーバーが.asmx Webサービスでリクエストを処理できませんでした。

それは投げ

「SOAP障害:サーバーは要求を処理できませんでした。--->値はnullにすることはできません。パラメータ名:S」

関係なく、私が送る何を入力、私は持っていませんnusoapを使用しましたが、PHPソープライブラリは使用できません。 私が使用しているコードは次のとおりです。私は最後の2日間から壁に頭を叩いてい

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

?> 

、この問題のためにグーグルを検索するが、解決したり、私を通じガイドno答えを得ません。

これについて少し気をつけることができる人は、非常に高く評価されます。 ありがとうございます。

答えて

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

返されたオブジェクトを変換した後、配列の要素を** simplexml_load_string()**に渡します –

関連する問題